perm filename CKP2.MAC[2,ALS] blob
sn#201653 filedate 1971-05-21 generic text, type T, neo UTF8
00010 TITLE CKP CHECKERS 5/19/71
00020 SUBTTL PLAY -- A. SAMUEL
00030
00040 ;****************************************************
00050 ; PLAY CONTAINS THOSE ESSENTIAL SET-UP PROCEDURES *
00060 ; TO INITIATE PLAY. IT RESTORES ALL NECESSARY *
00070 ; REGISTERS, CLEARS WORKING SPACES TO THE EXTENT *
00080 ; NECESSARY AND IT ACCEPTS AN INPUT BOARD OR STARTS *
00090 ; A NEW GAME. IT CALLS ON GET TO GET PLAY STARTED. *
00100 ;****************************************************
00110
00120
00130 ; REGISTER ASSIGNMENTS
00140 ;ASSIGNMENT USAGE
00150 Z=0
00160 X1=1 ; INDEX MAIN
00170 U1=2
00180 X2=3 ; INDEX PATH
00190 U2=4
00200 X3=5 ; INDEX PLAUS
00210 U3=6
00220 X4=7 ; INDEX TWIG
00230 U4=10
00240 X5=11 ; PASS COLOR
00250 U5=12
00260 Q=13
00270 A=14 ; ACTIVE
00280 P=15 ; PASSIVE
00290 K=16 ; KINGS
00300 PDP=17 ; PUSHJ
00310 I=Q
00320
00330
00340 OPDEF TTYUUO [51B8]
00350
00360 INTERN ACCEPT,BDOUT,BOUT,CDIFF,CRFST,CRUNT,CSFLAG,CTELLC,CTOTAL
00370 INTERN D,DEBUG,DIFF,FSTCR,GO,LEGM,LPTREE,MOVIN,MESS,FINDM,IA
00380 INTERN PB,PC,PLAYBS,PW,RUNT,SETB,SETW,SETPAR,IP,IK,MOVOUT,MOVES
00390 INTERN TELLC,TELPAR,TOTAL,TREE,TRESET,W,CORR,FIND,RECIN,SUM
00400 INTERN EXIT1,MOP,MOVX,LABEL
00410 INTERN INPSIZ,INPA,INPP,INPK,BOOKA,BOOKP,BOOKK,BOOKI,BOOKM
00420 EXTERN FINDFI,FINDX1,X4NORM,X4ALL,X4TAB,CRIP,REVERA,REVERP,REVERK,TLIST
00430 EXTERN CFLAG,NOTICE,DATE,WHERE,PHASE
00440 EXTERN OUTIN,TA,TP,TK,PLY,RJ2,RJ4,USEBOK,PCCNT
00450 EXTERN ACSAV,BAD,BEGIN,BEST,BEST2,BESTM,BESTO
00460 EXTERN BPBP,COLOR,COUNT,COUNTS,DECIN,DOTFLG,DWFLAG
00470 EXTERN EEB,EEB2,EOL,ERR,FLAG,GOOD
00480 EXTERN INTERP,LASCAR,LASTP,LEGAL,LOSE
00490 EXTERN LPFLAG,LPTFIX,LRPDL,MJ,MJBP,MJW,MTYPE,NOYES,NUMOUT
00500 EXTERN OA,OCT2,OCTIN,OCTOUT,OJ,OK,OLB,OLF,OP,ORDER,ORDER2,ORF
00510 EXTERN PLA,PLAS,PLFLG,PLK,PLKS,PLLB,PLLBS,ORB
00520 EXTERN PLLF,PLLFS,PLMJS,PLP,PLPS,PLRB,PLRBS,PLRF,PLRFS,PLSKIP,PLSKS
00530 EXTERN PRINT,PRUNE,PUP,RJOUT,S,SAVE,SCAN,SCORE,SFLAG,SI
00540 EXTERN SIDE,STOP,TAPER,TERPRI,TISKIP,TRUNK,TYI,TYO,U2S,U2SS,UPDATE
00550 EXTERN WIDTH,WIN,WORSTM,X1S,X2S,X2SS,X4S,XTWIG,ZS,ZZ,PHASEV,KSTART
00551
00552 ;THESE DEFINITIONS NEEDED TO DEFINE UNUSED GLOBALS
00553 EXTERN NOTICE
00554 INTERN ZL,LZERO,BEGINL,BEGL3,SYM,LCONTZ,DIVIDE,LCONTS
00555 INTERN TRNKNO,LBYT,LFLAG,SIG,HEADFL
00556
00557 ZL:
00558 LZERO:
00559 BEGINL:
00560 BEGL3:
00561 SYM:
00562 LCONTZ:
00563 LCONTS:
00565 DIVIDE: JRST NOTICE
00566 TRNKNO:
00567 LBYT:
00568 LFLAG: Z
00569
00570 PSHIFT=3 ;ALLOWANCE FOR PLY IN X2
00580 PSIZE=10 ;PLY VALUE IN MAIN
00590 PMASK=7 ;MASK FOR PLY IN X2
00600
00602 HEADFL: Z
00606
00610 PLAY: SKIPN TREE
00620 JRST PLAY1
00630 SETOM PRFLG
00640 PUSHJ PDP,DATE
00650 PUSHJ PDP,TERPRI
00660 MOVEI U1,[ASCIZ / /]
00670 MOVEM U1,DOTFLG
00680 PUSHJ PDP,TERPRI
00690 MOVEI U1,[ASCIZ /MOVE /]
00700 PUSHJ PDP,PRINT
00710 MOVE U1,SI
00720 PUSHJ PDP,NUMOUT
00730 MOVEI U1,[ASCIZ /, PDP-/]
00740 PUSHJ PDP,PRINT
00750 PUSHJ PDP,MTYPE
00760 PUSHJ PDP,NUMOUT
00770 MOVEI U1,[ASCIZ / PLAYING /]
00780 PUSHJ PDP,PRINT
00790 MOVEI U1,[ASCIZ /BLACK./]
00800 SKIPE SIDE
00810 MOVEI U1,[ASCIZ /WHITE./]
00820 PUSHJ PDP,PRINT
00830 PUSHJ PDP,TERPRI
00840 PUSHJ PDP,TELPAR
00850 PUSHJ PDP,BOUT
00860 PLAY1: MOVEI U1,MA
00870 SETZM (U1)
00880 CAIGE U1,BZ+17
00890 AOJA U1,PLAY1+1
00900 MOVE Z,PLAUSD
00910 MOVEM Z,PLDPT
00920 SETZB X1,FLIT
00930 SETZM STEM
00940 SETZM TIPPLY ;X2 OK INITIALLY
00950 SETZB X2,BPTR-1
00960 SETZM U2MAX
00970 MOVE U1,DEPTH
00980 LSH U1,3
00990 MOVEM U1,DEPTHM
01000 MOVEM U1,DEPTHZ
01010 SETZB X3,MA
01020 SETZB X4,COUNT
01030 MOVE U1,TIMEX
01040 LSH U1,11
01050 MOVEM U1,COUNTM
01060 SETZM COUNTZ ;USED AS TEST FIRST TIME
01070 SETZB U1,U2
01080 SETZB U3,U4
01090 MOVEI U5,17
01100 SETZM PLA(U5) ;CLEAR PLAUS SPACE
01110 SOJGE U5,.-1
01120 MOVE Z,WIN
01130 MOVEM Z,FLZZ
01140 MOVE U5,[XWD FLZZ, FLZZ+1]
01150 BLT U5,FLZZ+17 ;WINS TO CAUSE INITIAL FLITTING
01160 MOVEM Z,BEST
01170 MOVEM Z,BEST2
01180 MOVE Z,LOSE ;RESTORE ALL SCORE VALUES
01190 MOVEM Z,SCORE
01200 MOVEI U2,PSIZE-1
01210 MOVEM Z,S(U2)
01220 MOVEM Z,PRUZ(U2)
01230 SOJGE U2,.-2
01240 MOVEI U1,1
01250 MOVEI U2,PSIZE*14-PSIZE
01260 SETOM PLY-2(U2)
01270 SETZM PLY-1(U2)
01280 MOVEM U1,PSKIP-1(U2)
01290 MOVEM U1,PLY(U2)
01300 MOVEM U1,PSKIP(U2)
01310 SUBI U2,PSIZE
01320 JUMPGE U2,.-6
01330 MOVEM A,IA ;SAVE IN INITIAL BOARD SPACE
01340 MOVEM A,PLA(X3) ;ALSO GET READY FOR LEGAL
01350 MOVEM P,IP
01360 MOVEM P,PLP(X3)
01370 MOVEM K,IK
01380 MOVEM K,PLK(X3)
01390 MOVEM K,KSTART
01400 PUSHJ PDP,PHASEV
01405 PUSHJ PDP,PHASFI
01410 MOVE U1,SIDE
01420 MOVEM U1,COLOR
01430 SETZ X3,
01440 MOVE U2,BTERMS
01450 SKIPE COLOR
01460 MOVE U2,WTERMS
01470 MOVEM U2,CFLAG
01480 PUSHJ PDP,LEGAL ;FIND LEGAL MOVES
01490 JRST LOST ;GAME IS LOST
01500 AOJA X3,.+10
01510 ADDI X3,1
01520 MOVE Z,EEB
01530 MOVEM Z,EEB-1
01540 MOVEM Z,EEB-2
01550 MOVE Z,EEB2
01560 MOVEM Z,EEB2-1
01570 MOVEM Z,EEB2-2
01580 SKIPE USEBOK
01590 PUSHJ PDP,X4NORM
01600 SETZM GETF1 ;RESET GET FLAG 1 FOR OVER 8
01610 SETZM GETF2 ;RESET GET FLAG 2
01620 SETZB X4,ORDER
01630 SETZM ORDER2
01640 PUSHJ PDP,GET ;GET FIRST 12 TRUNKS
01650 SOJE X4,EXIT1+1 ;SINGLE MOVE ESCAPE
01660 JUMPL X4,BEGIN
01670 MOVE A,IA
01680 MOVE P,IP
01690 MOVE K,IK
01700 SKIPE USEBOK
01710 PUSHJ PDP,FINMOV ;SEE IF BOOK MOVE IS SAVED
01720 SKIPN TREE
01730 JRST PLAY2
01740 MOVEI U1,[ASCIZ /STARTING WITH TRUNK /]
01750 PUSHJ PDP,PRINT
01760 MOVE U1,X4
01770 ADDI U1,1
01780 CAILE U1,10
01790 MOVEI U1,10
01800 PUSHJ PDP,NUMOUT
01810 MOVEI U1,[ASCIZ / FOR PDP-/]
01820 PUSHJ PDP,PRINT
01830 PUSHJ PDP,MTYPE
01840 PUSHJ PDP,NUMOUT
01850 MOVEI U1,[ASCIZ /: MIN SCORE MAX/]
01860 PUSHJ PDP,PRINT
01870 PUSHJ PDP,TERPRI
01880 PLAY2: MOVEI U2,PSIZE*14-PSIZE
01890 MOVEM X4,BRUSH(U2)
01900 MOVEM X4,BRUSH+1(U2)
01910 SUBI U2,PSIZE
01920 JUMPGE U2,.-3
01930 SETZB X1,X2
01940 SETZ X3,
01950 MOVE U2,ORDER
01960 LSHC X2,4 ;GET FIRST TRUNK
01970 SUBI X2,1
01980 MOVEM U2,ORDER ;RESTORE
01984 MOVE Z,GTCNT(X2)
01988 MOVEM Z,GTCNT0
01990 LSH X2,3
02000 MOVEM X2,TRUNK ;NEEDED FLPERX
02010 AOJA X2,PL1
02020
00010 SUBTTL GET -- A. SAMUEL
00020 PAGE
00030 ;*****************************************************
00040 ; GET IS A SUBROUTINE WHICH GETS PLAY STARTED *
00050 ; ON DIFFERENT TRUNKS SO THAT PLAUS CAN TAKE OVER. *
00060 ; IT IS CALLED INITIALLY BY PLAY, TO ESTABLISH 8 *
00070 ; TRUNKS AND AGAIN LATER BY SORT TO GET ADDITIONAL *
00080 ; TRUNKS IF THEY EXIST. *
00090 ;*****************************************************
00100
00110 GET: MOVEI X2,-2
00120 PUSHJ PDP,PUP
00130 POPJ PDP, ;ALL TRUNKS FOUND, LEAVE GET
00140 MOVEM A,PLA(X3)
00150 MOVEM P,PLP(X3)
00160 MOVEM K,PLK(X3)
00170 MOVEM A,MOA(X4) ;SAVE IN MOVE SPACE
00180 MOVEM P,MOP(X4)
00190 MOVEM K,MOK(X4)
00200 PUSHJ PDP,FINDM
00210 SKIPE TREE
00220 PUSHJ PDP,GTREE
00230 SETZM MOJ(X4)
00240 PUSHJ PDP,LEGAL ;FIND MOVES
00250 JRST WON ;WINNING FIRST MOVE FOUND
00260 PUSHJ PDP,GET1A ;JUMP MOVE
00270 MOVE Z,PLRF(X3) ;SAVE MOVE VECTORS
00280 MOVEM Z,MORF(X4)
00290 MOVE Z,PLLF(X3)
00300 MOVEM Z,MOLF(X4)
00310 MOVE Z,PLLB(X3)
00320 MOVEM Z,MOLB(X4)
00330 MOVE Z,PLRB(X3)
00340 MOVEM Z,MORB(X4)
00350 ADDI X3,1 ;INDEX
00360 MOVE X1,X4 ;GET TRUNK INDEX
00370 LSH X1,PSHIFT+3 ;TO INDEX MAIN
00380 MOVE U4,X4
00390 LSH U4,3 ;TO INDEX OVERFLOW
00400 MOVEM U4,TRUNK
00410 SETZM OVA(U4) ;TRASH GUARD
00420 SETZM GETCNT# ;TO COUNT BOARDS
00430 GET2: PUSHJ PDP,PUP ;NOW CONTINUE
00440 JRST GET4 ;NO MORE BRANCHES
00450 MOVE Z,GETCNT
00460 CAIL Z,10 ;WHERE TO
00470 JRST GET3 ;TO OVERFLOW
00480 MOVE Z,MOA(X4)
00490 MOVEM Z,MMOVA(X1)
00500 MOVEM P,MMOVP(X1)
00510 MOVEM A,MA(X1)
00520 MOVEM P,MP(X1)
00530 MOVEM K,MK(X1)
00540 PUSHJ PDP,LEGAL
00550 JRST GET1Z ;NO MOVES, SO DISCARD TRUNK
00560 PUSHJ PDP,GET2A
00570 MOVE Z,PLRF(X3)
00580 MOVEM Z,MRF(X1)
00590 MOVE Z,PLLF(X3)
00600 MOVEM Z,MLF(X1)
00610 MOVE Z,PLLB(X3)
00620 MOVEM Z,MLB(X1)
00630 MOVE Z,PLRB(X3)
00640 MOVEM Z,MRB(X1)
00650 MOVEI Z,1
00660 MOVEM Z,MSKIP(X1)
00670 MOVE Z,EEB(X3) ;START ME OFF RIGHT
00680 MOVEM Z,ME(X1)
00690 MOVE Z,EEB2(X3)
00700 MOVEM Z,ME2(X1)
00710 ADDI X1,1
00720 AOS GETCNT
00730 JRST GET2
00740 GET1Z: SKIPN TREE
00750 JRST GET4B
00760 MOVEI U1,[ASCIZ /IGNORE THIS TRUNK/]
00770 PUSHJ PDP,PRINT
00780 PUSHJ PDP,TERPRI
00790 JRST GET4B
00800
00810 GET1A: SETOM MOJ(X4)
00820 GET2A: MOVE Z,EEB-2(X3)
00830 MOVEM Z,EEB(X3)
00840 MOVE Z,EEB2-2(X3)
00850 MOVEM Z,EEB2(X3)
00860 POPJ PDP,
00870
00880 GET3: MOVE Z,GETCNT
00890 CAIG Z,10
00900 MOVE X1,TRUNK
00910 MOVE Z,MOA(X4)
00920 MOVEM Z,OVMOVA(X1)
00930 MOVEM P,OVMOVP(X1)
00940 MOVEM A,OVA(X1)
00950 MOVEM P,OVP(X1)
00960 MOVEM K,OVK(X1)
00970 PUSHJ PDP,LEGAL
00980 SOJA X3,GET ;NO MOVES, DISCARD TRUNK
00990 PUSHJ PDP,GET2A
01000 MOVE Z,PLRF(X3)
01010 MOVEM Z,OVRF(X1)
01020 MOVE Z,PLLF(X3)
01030 MOVEM Z,OVLF(X1)
01040 MOVE Z,PLLB(X3)
01050 MOVEM Z,OVLB(X1)
01060 MOVE Z,PLRB(X3)
01070 MOVEM Z,OVRB(X1)
01080 MOVEI Z,1
01090 MOVEM Z,OVSKIP(X1)
01100 MOVE Z,EEB(X3)
01110 MOVEM Z,OVE(X1)
01120 MOVE Z,EEB2(X3)
01130 MOVEM Z,OVE2(X1)
01140 ADDI X1,1
01150 SETZM OVA(X1)
01160 AOS GETCNT
01170 JRST GET2
01180
01190 GET4: MOVE Z,GETCNT
01200 CAIGE Z,10 ;HOW MANY BRANCHES
01210 SETZM MA(X1) ;SET STOP IN MAIN IF NEEDED
01213 SUBI Z,1
01216 MOVEM Z,GTCNT(X4) ;USED IN SET AFTER MOVEM GTCNT0
01220 MOVE U3,X4
01230 ADDI X4,1
01240 CAIG X4,10 ;PUT WHERE
01250 JRST .+5 ;INTO ORDER
01260 MOVE U4,ORDER2
01270 LSHC X4,-4
01280 MOVEM U4,ORDER2
01290 JRST .+4
01300 MOVE U4,ORDER ;NOW FIX ORDER
01310 LSHC X4,-4
01320 MOVEM U4,ORDER ;SAVE ORDER
01330 MOVE X4,U3 ;RESTORE X4
01340 LSH U3,PSHIFT ;GET INTO X2 FORM
01350 ADDI U3,1 ;SET PLY VALUE
01360 MOVEM U3,FLX2(X4) ;SET UP FOR FLITTING
01370 GET4B: ADDI X4,1
01380 SKIPE GETF2 ;IS THIS A FIRST PASS
01390 JRST GET4A ;YES
01400 CAIGE X4,14 ;CHANGED FOR 12 TRUNKS
01410 SOJA X3,GET ;SAFE TO GO ON
01420 GET4A: SETZM GETF1
01430 SKIPE PLRF-2(X3)
01440 JRST GET5
01450 SKIPE PLLF-2(X3)
01460 JRST GET5
01470 SKIPE PLLB-2(X3)
01480 JRST GET5
01490 SKIPN PLRB-2(X3)
01500 POPJ PDP, ;NO MORE MOVES
01510
01520 GET5: SETOM GETF1 ;OVER 12 SO SET FLAG AND SAVE
01530 MOVE PLA-2(X3)
01540 MOVEM PLAS
01550 MOVE PLP-2(X3)
01560 MOVEM PLPS
01570 MOVE PLK-2(X3)
01580 MOVEM PLKS
01590 MOVE PLSKIP-2(X3)
01600 MOVEM PLSKS
01610 MOVE PLRF-2(X3)
01620 MOVEM PLRFS ;SAVE FOR FUTURE USE
01630 MOVE PLLF-2(X3)
01640 MOVEM PLLFS
01650 MOVE PLLB-2(X3)
01660 MOVEM PLLBS
01670 MOVE PLRB-2(X3)
01680 MOVEM PLRBS
01690 MOVE MJW-2(X3)
01700 MOVEM PLMJS
01710 POPJ PDP, ;MUST RETURN
01720 GETF1: Z ;MORE THAN 8 TRUNK FLAG
01730 GETF2: Z ;SECOND TIME IN FLAG
01740 GETF3: Z ;NEW TRUNK FLAG
01750
01760
01770 SUBTTL SET -- A. SAMUEL
01780 PAGE
01790 ;********************************************************
01800 ; SET IS USED TO SET-UP CONDITIONS FOR PLAUS *
01810 ; AFTER A BACK UP HAS OCCURRED. IT ALSO CONTAINS THE *
01820 ; NECESSARY PROVISIONS FOR STILL FURTHER BACKING UP *
01830 ; WHEN EMPTY BPTR WORDS ARE ENCOUNTERED, AND FOR *
01840 ; SWITCHING TRUNKS WHEN THEY ARE EXHAUSTED. *
01850 ;********************************************************
01860
01870 SET: SETZM MJW-1 ;SAFETY PRECAUTION
01880 SETZM TIPPLY ;RESTORE FOR U2 LESS THAN 10
01890 MOVE U4,TRUNK
01900 SETZB X1,OVA(U4)
01910 SETZM BPTR-1(X2) ;CLEAN UP TRASH
01920 SUBI X2,1
01930 SKIPN U1,BPTR-1(X2) ;NEW BRANCH NUMBER
01940 JRST SET10 ;NO MORE BOARDS AT THIS LEVEL
01950 SETOM STEM
01960 TRNN X2,PMASK-1 ;FULL DEPTH ON FIRST REPLY
01970 SETZM STEM
01980 MOVE X3,PLAYD
01990 MOVEM X3,PLDPT
02000 MOVE X3,X2
02010 LSH X3,3
02020 LSHC X1,4
02030 JUMPN X1,.+4 ;DIRTY BPTR?
02040 MOVEI U1,[ASCIZ /DIRTY BPTR./]
02050 PUSHJ PDP,PRINT
02060 JRST SET10
02070 SUBI X1,1
02080 IOR X1,X3
02090 MOVEM U1,BPTR-1(X2) ;REPLACE REMAINING
02120 MOVE U2,X2
02130 ANDI U2,PMASK
02131 CAILE U2,2
02132 JRST .+4 ;CONSIDER PRUNING
02133 SKIPLE GTCNT0 ;TEST FOR JUMP REPLY
02134 CAIG U2,1
02135 JRST SET0B ;DO NOT PRUNE
02140 MOVE Z,S-1(U2)
02150 CAMG Z,PRUZ-1(U2)
02160 JRST SET0A
02170 MOVEM Z,PRUZ-1(U2)
02172 MOVE Z,PRUCT-1(U2)
02174 MOVEM Z,PRUC-1(U2)
02176 JRST SET0B ;OK
02178
02180 PRUCT: 3 ;PRUNING COUNT TABLE
02182 2 ;N+1 BRANCHES TRIED
02184 1
02186 1
02188 1
02190 1
02192 1
02194 1
02196 1
02199
02200 SET0A: SOSGE PRUC-1(U2) ;IS IT TIME TO PRUNE
02210 JRST SET10 ;YES
02220 SET0B: MOVE U1,MSKIP-10(X1) ;THIS ESTABLISHES RELATION BETWEEN PSKIP AND MSKIP
02230 MOVEM U1,PSKIP-1(X2)
02240 ADD U1,PLY-1(X2)
02250 MOVEM U1,PLY(X2) ;SET NEW BASE PLY
02260 XOR U1,SIDE ;CLEAN UP COLOR
02270 ANDI U1,1
02280 MOVE Z,ME-10(X1)
02290 MOVEM Z,EEB-1
02300 MOVEM Z,EEB-2 ;PREPARATION FOR BACKUP IN PLAUS
02310 MOVE Z,ME2-10(X1)
02320 MOVEM Z,EEB2-1
02330 MOVEM Z,EEB2-2 ;DITTO
02340 TRC U1,1
02350 MOVEM U1,COLOR ;SET NEW BASE COLOR
02360 SKIPE TREE
02370 PUSHJ PDP,STREE
02380 SETZ X4, ;NEEDED LATER TO COUNT BOARDS
02390 MOVE U2,X2
02400 ANDI U2,PMASK
02410 MOVE U1,PSKIP-1(X2)
02420 TRNE U1,1
02430 JRST SET1A
02440 MOVE Z,S-1(U2) ;OK FOR EVEN SKIP
02450 JRST SET1B
02460
02470 ;ODD PSKIP CASE
02480 SET1A: MOVE U3,X2
02490 MOVE U1,PSKIP-2(U3)
02500 TRNN U1,1
02510 SOJA U3,.-2 ;ODD ONE EXISTS
02520 ANDI U3,PMASK
02530 MOVE Z,S-2(U3)
02540 SET1B: MOVEM Z,S(U2)
02550 MOVE U1,X2 ;NEED SECOND X1
02560 LSH U1,3 ;SIMULATE X1
02570 MOVEM U1,X1SET#
02580 SKIPA
02590 SET1: EXCH X1,X1SET
02600 SETZ X3,
02610 PUSHJ PDP,MUP
02620 JRST SET6 ;NO MORE MOVES
02630 EXCH X1,X1SET
02640 MOVEM P,MOVPP
02650 SET2: MOVEM A,PLA(X3)
02660 MOVEM P,PLP(X3)
02670 MOVEM K,PLK(X3)
02680 PUSHJ PDP,LEGAL
02690 JRST SET7 ;NO LEGAL MOVES
02700 AOJA X3,SET2B ;JUMP RETURN
02710 ADDI X3,1
02720 SET2A: SETZM SETC# ;TO COUNT MOVES
02730 SKIPE U1,PLRF-1(X3)
02740 JRST SF1 ;ONE FOUND
02750 SE2: SKIPE U1,PLLF-1(X3)
02760 JRST SF2
02770 SE3: SKIPE U1,PLLB-1(X3)
02780 JRST SF3
02790 SE4: SKIPE U1,PLRB-1(X3)
02800 JRST SF4
02810 JRST SF5 ;MUST BE ONE
02820
02830 SF1: AOS SETC
02840 SUBI U1,1
02850 AND U1,PLRF-1(X3)
02860 JUMPN U1,SET2C
02870 JRST SE2
02880
02890 SF2: SKIPE SETC
02900 JRST SET2C
02910 AOS SETC
02920 SUBI U1,1
02930 AND U1,PLLF-1(X3)
02940 JUMPN U1,SET2C
02950 JRST SE3
02960
02970 SF3: SKIPE SETC
02980 JRST SET2C
02990 AOS SETC
03000 SUBI U1,1
03010 AND U1,PLLB-1(X3)
03020 JUMPN U1,SET2C
03030 JRST SE4
03040
03050 SF4: SKIPE SETC
03060 JRST SET2C
03070 AOS SETC
03080 SUBI U1,1
03090 AND U1,PLRB-1(X3)
03100 JUMPN U1,SET2C
03110 SF5: CAIL X3,14 ;SAFER TO SAVE ANYWAY
03120 JRST SET2C ;YES
03130 PUSHJ PDP,PUP ;UPDATE
03140 SOJA X3,SET7 ;MUST BE ERROR
03150 JRST SET2 ;GO AROUND AGAIN
03160
03170 SET2C: CAIL X4,10
03180 JRST SET4 ;MUST SAVE IN OVERFLOW
03190 MOVEM A,MA(X1)
03200 MOVEM P,MP(X1)
03210 MOVEM K,MK(X1)
03220 MOVE Z,PLRF-1(X3) ;STORE ITEMS SUBJECT TO CHANGE
03230 MOVEM Z,MRF(X1)
03240 MOVE Z,PLLF-1(X3)
03250 MOVEM Z,MLF(X1)
03260 MOVE Z,PLLB-1(X3)
03270 MOVEM Z,MLB(X1)
03280 MOVE Z,PLRB-1(X3)
03290 MOVEM Z,MRB(X1)
03300 SET3: MOVE Z,EEB-1(X3)
03310 MOVEM Z,ME(X1)
03320 MOVE Z,EEB2-1(X3)
03330 MOVEM Z,ME2(X1)
03340 MOVEM X3,MSKIP(X1)
03350 SKIPE TREE
03360 PUSHJ PDP,SETT3
03370 ADDI X1,1
03380 AOJA X4,SET1
03390
03400 SET2B: MOVE Z,EEB-3(X3)
03410 MOVEM Z,EEB-1(X3)
03420 MOVE Z,EEB2-3(X3)
03430 MOVEM Z,EEB2-1(X3)
03440 JRST SET2A
03450
03460 SET4: CAIG X4,10
03470 MOVE X1,TRUNK
03480 MOVEM A,OVA(X1)
03490 MOVEM P,OVP(X1)
03500 MOVEM K,OVK(X1)
03510 MOVE Z,PLRF-1(X3) ;STORE ITEMS WHICH MAY CHANGE
03520 MOVEM Z,OVRF(X1)
03530 MOVE Z,PLLF-1(X3)
03540 MOVEM Z,OVLF(X1)
03550 MOVE Z,PLLB-1(X3)
03560 MOVEM Z,OVLB(X1)
03570 MOVE Z,PLRB-1(X3)
03580 MOVEM Z,OVRB(X1)
03590 SET5: MOVE Z,EEB-1(X3)
03600 MOVEM Z,OVE(X1)
03610 MOVE Z,EEB2-1(X3)
03620 MOVEM Z,OVE2(X1)
03630 MOVEM X3,OVSKIP(X1)
03640 SKIPE TREE
03650 PUSHJ PDP,SETT5
03660 SETZM OVA+1(X1)
03670 ADDI X1,1
03680 AOJA X4,SET1
03690
03700 SET6: EXCH X1,X1SET
03710 CAIGE X4,10
03720 SETZM MA(X1) ;SET GUARD IN MAIN IF NEEDED
03730 JUMPLE X4,SET8 ;NO MUP CASE
03740 MOVE U1,X2
03750 ANDI U1,PMASK
03760 CAIL U1,PSIZE-1 ;CAN WE GO ON
03770 AOJA X2,TIP ;NO
03780 MOVE U3,BRUSH-1(X2)
03790 ADD U3,X4
03800 MOVEM U3,BRUSH(X2)
03810 CAMG U1,WIDTH
03820 AOJA X2,PL1 ;GO ON
03830 ADD U3,TAPER
03840 MOVEM U3,BRUSH-1(X2)
03850 CAMLE U3,DEPTHM
03860 AOJA X2,TIP ;TIME TO STOP
03870 AOJA X2,PL1 ;INDEX TO PL1
03880
03890 ;NO LEGAL MOVES AFTER MUP
03900 SET7: TRNE X3,1
03910 JRST SET1
03920 MOVE U1,PSKIP-1(X2)
03930 TRNE U1,1
03940 JRST SET8A ;ODD NO LEGAL LIKE EVEN NO MUP
03950 SET7A: MOVE U2,X2
03960 ANDI U2,PMASK
03970 MOVE Z,WIN
03980 SUB Z,PLY(X2)
03990 SUB Z,X3
04000 SETZ X3,
04010 SKIPE TREE
04020 PUSHJ PDP,TRESS ;YES TRESS
04030 CAMG Z,S-1(U2)
04040 MOVE Z,S-1(U2)
04050 JRST SET11
04060
04070 SET8: MOVE U1,PSKIP-1(X2)
04080 TRNE U1,1
04090 JRST SET7A ;ODD NO MUP LIKE EVEN NO LEGAL
04100 SET8A: MOVE U2,X2
04110 ANDI U2,PMASK
04120 MOVE Z,LOSE
04130 ADD Z,PLY(X2)
04140 ADD Z,X3
04150 SETZ X3,
04160 SKIPE TREE
04170 PUSHJ PDP,TRESS
04180 CAMLE Z,S-1(U2)
04190 MOVEM Z,S-1(U2)
04200 AOJA X2,SET ;ANOTHER AT SAME LEVEL
04210
04220 TRESP: SETZM X3
04230 MOVE U1,PSKIP-1(X2)
04240 TRNN U1,1
04250 MOVNS Z
04260 MOVE U2,X2
04270 ANDI U2,PMASK
04280 SKIPN U2
04290 ADDI U2,PSIZE
04300 TRESS: MOVE U5,S-1(U2) ;PREPARE A-B SCORES
04310 MOVE U3,X2
04320 MOVE U1,PSKIP-2(U3)
04330 TRNN U1,1
04340 SOJA U3,.-2
04350 ANDI U3,PMASK
04360 SKIPN U3
04370 ADDI U3,PSIZE
04380 MOVE U3,S-2(U3)
04390 MOVE U1,PSKIP-1(X2)
04400 TRNE U1,1
04410 EXCH U5,U3
04420 MOVEM U3,ZZ-2(X3)
04430 MOVEM U5,ZZ-1(X3)
04440 JRST TREES
04450
04460 ;NO MORE BOARDS BACK-UP
04470 SET9: MOVEM Z,ZS
04480 SKIPE TREE
04490 PUSHJ PDP,TRESP
04500 MOVE Z,ZS
04510 MOVEM Z,S-1(U2)
04520 JRST SET10
04530
04540 SET9A: SKIPE TREE
04550 PUSHJ PDP,TRESP
04560 SET10: MOVE U2,X2
04570 ANDI U2,PMASK ;GET PLY PORTION ONLY
04580 SKIPN U2
04590 ADDI U2,PSIZE ;CORRECTION IF PLY OVER
04600 MOVE Z,S-1(U2)
04610 SET11: MOVE U1,PSKIP-2(X2) ;BACKING UP, REMEMBER
04620 TRNN U1,1
04630 MOVNS Z ;WOOPS, WRONG SIGN!
04640 CAIGE U2,2
04650 JRST SET12 ;WILL GO ON TO SET21
04660 MOVE U3,X2
04670 SUBI U3,1 ;BACK 1
04680 MOVE U1,PSKIP-2(U3) ;TEST EARLIER SKIP
04690 TRNN U1,1 ;IS IT ODD
04700 SOJA U3,.-2 ;ONE ALWAYS EXISTS
04710 MOVE U1,U3
04720 ANDI U1,PMASK
04730 MOVM U5,Z
04740 CAILE U5,400000 ;MARGIN EXEMPTION LEVEL
04750 JRST .+7
04760 LSH U5,-4 ;DIVIDE BY 16
04770 MOVNS U5
04780 ADD U5,Z
04790 CAMLE U5,S-2(U1)
04800 JRST SET12
04810 JRST .+3
04820 CAMLE Z,S-2(U1) ;CAN WE ALPHA PRUNE
04830 JRST SET12 ;NO SO BETA TEST
04840 MOVE X2,U3 ;YES
04850 SOJG U1,SET ;DEEP ENOUGHT TO SET
04860 JRST SET21A ;NEW TRUNK NEEDED
04870 SET12: MOVNS Z
04880 SOJLE U2,SET21 ;COMPARE WITH SCORE
04890 CAMLE Z,S-1(U2)
04900 MOVEM Z,S-1(U2)
04910 JRST SET
04920
04930 SET21: TRNN X2,PMASK
04932 SUBI X2,1
04933 LSH X2,-PSHIFT
04935 CAMG Z,SCORE
04940 JRST SET21D
04950 MOVEM Z,SCORE
04990 MOVEM X2,MOVX ;SAVE AS MOVE RECORD
04995 JRST SET21D
04996 SET21A: TRNN X2,PMASK
04997 SUBI X1,1
04998 LSH X2,-PSHIFT
05000 SET21D: MOVE U1,COUNT
05010 AOS U2,COUNTX
05015 MOVEM X2,MOVXZ(U2)
05016 SETOM MOVXZ+1(U2)
05020 MOVE U3,DEPTHM
05030 MOVEM U3,DEPTHZ(U2)
05040 SETZM DEPTHZ+1(U2)
05050 MOVEM U1,COUNTZ(U2) ;SAVE TO PRINT
05060 SETZM COUNTZ+1(U2) ;PRINT STOP
05070 SUB U1,COUNTZ-1(U2) ;INCREMENT COUNT
05080 MOVE U3,COUNTM
05090 SUB U3,U1
05100 MOVEM U3,COUNTM
05110 MOVEI Z,4 ;CORRECTION
05120 CAMG U1,COUNTM
05130 JRST .+3
05140 MOVNS Z
05150 JRST .+4
05160 IMULI U1,5
05170 LSH U1,-2
05180 CAMG U1,COUNTM
05190 ADDM Z,DEPTHM
05200 SKIPN U1,ORDER
05210 JRST EXIT
05220 SETZ X1,
05230 LSHC X1,4
05240 MOVEM U1,ORDER ;SAVE REST OF POINTER
05250 MOVE Z,FLZZ-1(X1)
05260 CAMLE Z,BAD ;IF Z < BAD THEN NO USE TO GO ON
05270 JRST .+7
05280 SKIPN TREE
05290 JRST .+4
05300 PUSHJ PDP,TERPRI
05310 MOVEI U1,[ASCIZ /REMAINING TRUNKS TERMINATED./]
05320 PUSHJ PDP,PRINT
05330 JRST EXIT
05340 SKIPE TREE
05350 PUSHJ PDP,TRTRE
05351 MOVEI U1,7
05352 MOVE Z,LOSE
05353 MOVEM Z,PRUZ(U1)
05354 MOVE U2,PRUCT(U1)
05355 MOVEM U2,PRUC(U1)
05356 SOJGE U1,.-3
05360 MOVE U1,STEMD
05370 MOVEM U1,PLDPT
05380 SETZM STEM
05390 MOVE X2,FLX2-1(X1) ;GET NEW STARTING PLACE
05400 SUBI X1,1
05401 MOVE Z,GTCNT(X1)
05402 MOVEM Z,GTCNT0 ;CURRENT VALUE
05410 LSH X1,3
05420 MOVEM X1,TRUNK ;SAVE FOR OVERX USAGE
05430 MOVE Z,SCORE ;NOW FIX SCORE
05440 MOVE Q,LOSE
05450 MOVE U2,X2
05460 MOVE U3,X2
05470 ANDI U3,PMASK
05480 SKIPN U3
05490 ADDI U3,PSIZE
05500 MOVE U1,PLY-1(U2)
05510 TRNE U1,1
05520 JRST .+4
05530 MOVEM Z,S-1(U3)
05540 SUBI U2,1
05550 SOJG U3,.-5
05560 MOVEM Q,S-1(U3)
05570 SUBI U2,1
05580 SOJG U3,.-10
05590 SKIPN U2,ORDER2
05600 JRST SET21C
05610 SKIPN U1,ORDER
05620 JRST SET21B
05630 SETZ X1,
05640 LSHC X1,4
05650 MOVE Z,FLZZ-1(X1)
05660 CAMG Z,BEST2
05670 JRST .+3
05680 MOVEM Z,BEST
05690 JRST SET21C
05700 EXCH Z,BEST2
05710 MOVEM Z,BEST
05720 SET21B: EXCH U2,ORDER
05730 MOVEM U2,ORDER2
05740 SET21C: TRNN X2,PMASK
05750 JRST TIP
05760 MOVE U1,BRUSH-1(X2)
05770 CAML U1,DEPTHM
05780 JRST TIP
05790 JRST PL1
05800
05810 ; EXIT REPORTS FINAL MOVE.
05820
05830 EXIT: SKIPN TREE
05840 JRST EXIT2
05850 PUSHJ PDP,TERPRI
05860 SETO U2,
05870 MOVE U1,COUNTS(U2)
05880 SETZM COUNTS(U2)
05890 JUMPE U1,.+4
05900 SETZ X2,
05910 MOVM Z,U1
05920 PUSHJ PDP,RJ4
05930 CAIGE U2,24
05940 AOJA U2,.-7
05950 PUSHJ PDP,TERPRI
05960 EXIT2: MOVE Z,SCORE
05970 CAML Z,GOOD
05980 JRST WON
05990 CAMG Z,BAD
06000 JRST LOST
06010 EXIT1: MOVE X4,MOVX ;GET BEST TRUNK NUMBER
06020 MOVE Z,MOA(X4)
06030 MOVEM Z,OA
06040 MOVE Z,MOP(X4)
06050 MOVEM Z,OP
06060 MOVE Z,MOK(X4)
06070 MOVEM Z,OK
06080 MOVE Z,MORF(X4)
06090 MOVEM Z,ORF
06100 MOVE Z,MOLF(X4)
06110 MOVEM Z,OLF
06120 MOVE Z,MOLB(X4)
06130 MOVEM Z,OLB
06140 MOVE Z,MORB(X4)
06150 MOVEM Z,ORB
06160 MOVE Z,MOJ(X4)
06170 MOVEM Z,OJ
06180 SKIPE TREE
06190 PUSHJ PDP,TERPRI
06200 MOVE U1,MOVES(X4)
06210 POPJ PDP,
06220
06230 LOST: PUSHJ PDP,PDP16
06240 MOVEI U1,[ASCIZ / RESIGNS./]
06250 PUSHJ PDP,PRINT
06260 PUSHJ PDP,TERPRI
06270 SETOM LPFLAG ;JUST TO BE SURE
06280 RELEAS 2, ;RELEASE LPT (IT MAY HAVE BEEN INITED)
06290 JRST BEGIN
06300 WON: SKIPE WONFLG#
06310 JRST EXIT1
06320 SETOM WONFLG
06330 PUSHJ PDP,TERPRI
06340 PUSHJ PDP,PDP16
06350 MOVEI U1,[ASCIZ / EXPECTS TO WIN IN /]
06360 PUSHJ PDP,PRINT
06370 MOVE Z,WIN
06380 SUB Z,SCORE
06390 ADDI Z,1 ;FIX THIS UP TO COUNT RIGHT
06400 MOVE U1,Z
06410 PUSHJ PDP,NUMOUT
06420 MOVEI U1,[ASCIZ / MOVES./]
06430 PUSHJ PDP,PRINT
06440 PUSHJ PDP,TERPRI
06450 JRST EXIT1
06460
06470
06480 SUBTTL FINDM & FIND -- A. SAMUEL
06490 PAGE
06500 ;************************************************************
06510 ; FINDM IS A SUBROUTINE TO SAVE A MOVE IN A FORM SUITABLE *
06520 ; FOR TRANSMITTAL TO MOVOUT. *
06530 ;************************************************************
06540
06550 FINDM: MOVE U5,P
06560 XOR U5,PLA-1(X3)
06570 MOVE Z,U5
06580 AND Z,P
06590 XOR U5,Z
06600 PUSHJ PDP,FIND
06610 MOVE U5,Z
06620 MOVE Z,U1
06630 PUSHJ PDP,FIND
06640 HRL U1,Z
06650 MOVEM U1,MOVES(X4)
06660 POPJ PDP,
06670
06680 ;****************************************************
06690 ; FIND IS A SUBROUTINE WHICH LOCATES A BIT IN *
06700 ; REGISTER U5 AND RETURNS A BINARY COUNT OF ITS *
06710 ; CHECKER POSITION IN U1. REGISTER X5 IS USED AND IS*
06720 ; NOT RESET. *
06730 ;****************************************************
06740
06750 FIND: SETZB X5,U1
06760 ADDI U1,1
06770 LSHC X5,22
06780 JUMPN X5,FIND6
06790 ADDI U1,20
06800 LSHC X5,11
06810 JUMPN X5,FIND7
06820 FIND1: ADDI U1,10
06830 LSHC X5,5
06840 JUMPN X5,FIND8
06850 FIND2: ADDI U1,4
06860 LSHC X5,2
06870 JUMPN X5,FIND9
06880 FIND3: ADDI U1,2
06890 LSHC X5,1
06900 SKIPN X5
06910 FIND4: ADDI U1,1
06920 POPJ PDP,
06930 FIND6: LSHC X5,-11
06940 JUMPE X5,FIND1
06950 FIND7: LSHC X5,-4
06960 JUMPE X5,FIND2
06970 FIND8: LSHC X5,-2
06980 JUMPE X5,FIND3
06990 FIND9: LSHC X5,-1
07000 JUMPE X5,FIND4
07010 POPJ PDP,
07020
00010 SUBTTL PROGRAM STORAGE SPACE
00020 PAGE
00030
00040 ;***********************************************************
00050 ;MAIN IS INDEXED BY TRUNK PLY AND BRANCH
00060 MA: BLOCK PSIZE*140 ;ACTIVE PIECES
00070 MP: BLOCK PSIZE*140 ;PASSIVE PIECES
00080 MK: BLOCK PSIZE*140 ;ALL KINGS
00090 MRF: BLOCK PSIZE*140 ;RIGHT FOREWARD MOVES
00100 MLF: BLOCK PSIZE*140 ;LEFT FOREWARD MOVES
00110 MLB: BLOCK PSIZE*140 ;LEFT BACKWARD MOVES
00120 MRB: BLOCK PSIZE*140 ;RIGHT BACKWARD MOVES
00130 MSKIP: BLOCK PSIZE*140 ;SKIPPED MOVES
00140 ME: BLOCK PSIZE*140 ;HALF EVALUATION
00150 ME2: BLOCK PSIZE*140
00160 MMOVA: BLOCK PSIZE*140
00170 MMOVP: BLOCK PSIZE*140
00180
00190 MOVA: BLOCK 400
00200 MOVP: BLOCK 400
00210 MVAA: BLOCK 20
00220 MVPP: BLOCK 20
00230 MOVAA: Z
00240 MOVPP: Z
00250 MMSKIP: BLOCK 20
00260
00261 GTCNT0: Z ;CURRENT REPLY COUNT (FROM 0)
00262 GTCNT: BLOCK 20 ;REPLY COUNTS
00263
00270 Z
00280 PRUC: BLOCK 20 ;PRUNE COUNT
00290 0 ;GUARD
00300 COUNTZ: BLOCK 21 ;COUNTS FOR EACH TRUNK
00310 DEPTHZ: BLOCK 20 ;DEPTHS FOR EACH TRUNK
00315 MOVXZ: BLOCK 20 ;TRUNK ORDER AS USED
00320 COUNTX: 0 ;INDEX TRUNKS FOR COUNTZ
00330 ;PATH IS INDEXED BY TRUNK AND PLY IN X2
00340 Z ;TO ALLOW RAP AROUND
00350 BPTR: BLOCK PSIZE*14 ;POINTER WITH 8 4-BIT FIELDS
00360 BPTRO: Z
00370 Z
00380 PSKIP: BLOCK PSIZE*14
00390 0 ;GUARD
00400 BRUSH: BLOCK PSIZE*14
00410 MOVX: Z
00420
00430
00440 ;TWIG SPACE IS INDEXED BY BRANCH AND TWIG
00450 TRF: BLOCK 400
00460 TLF: BLOCK 400
00470 TLB: BLOCK 400
00480 TRB: BLOCK 400
00490 TSKIP: BLOCK 400
00500 TE: BLOCK 400
00510 TE2: BLOCK 400
00520
00530 ;OV SPACE IS INDEXED BY TRUNK AND NUMBER IN X4
00540 OVA: BLOCK 140
00550 OVP: BLOCK 140
00560 OVK: BLOCK 140
00570 OVRF: BLOCK 140
00580 OVLF: BLOCK 140
00590 OVLB: BLOCK 140
00600 OVRB: BLOCK 140
00610 OVSKIP: BLOCK 140
00620 OVE: BLOCK 140
00630 OVE2: BLOCK 140
00640 OVMOVA: BLOCK 140
00650 OVMOVP: BLOCK 140
00660
00670
00680 ;FLIT SPACE IS INDEXED BY TRUNK IN X1
00690 FLZZ: BLOCK 20 ;BEST ZZ FOR TRUNK AT FLIT TIME
00700 FLX2: BLOCK 20 ;X1 VALUES AT FLIT TIME
00710
00720 ;INITIAL BOARD AT START OF TREE SEARCH
00730 IA: Z
00740 IP: Z
00750 IK: Z
00760
00770 ;MOVE SPACE FOR ALL INITIAL MOVES
00780 MOA: BLOCK 20
00790 MOP: BLOCK 20
00800 MOK: BLOCK 20
00810 MORF: BLOCK 20
00820 MOLF: BLOCK 20
00830 MOLB: BLOCK 20
00840 MORB: BLOCK 20
00850 MOVES: BLOCK 20
00860 MOJ: BLOCK 20
00870
00880 ;BRANCH SPACE INDEXED BY BRANCH IN X4
00890 BPLY: BLOCK 20
00900 BSKIP: BLOCK 20
00910 BZ: BLOCK 20 ;INDICATED BRANCH SCORE
00920
00930 DEPTHM: 60
00940 TIMEX: 170 ;STANDARD TIME
00950 DEPTH: 3 ;STANDARD DEPTH OF 3
00960 U2MAX: 0 ;MAX MAIN DEPTH
00970 COUNTM: 0 ;REMAINING COUNT
00980 PRUZ: BLOCK PSIZE ;PRUNE COMPARE SCORE
00990
01000 0 ;EXTRA GUARD FOR TEMP PURPOSES
01010 SA: BLOCK 100 ;TO SAVE GAME RECORD
01020 SP: BLOCK 100
01030 SK: BLOCK 100
01040 0
01050
01060 STEM: Z ;TRUNK STEM FLAG
01070 FLIT: Z ;FLIT FLAG
01080 EEBFLF: Z ;USED IN TIP
01090
01100 INTERN LOADTA,DFILL,RFILL,DSAVE,LC
01110 LOADTA:
01120 LC:
01130 RFILL:
01140 DFILL:
01150 DSAVE: JRST NOTICE
00010
00020
00030
00040
00050 SUBTTL PLAUSABILITY ANALYSIS -- A. SAMUEL
00060 PAGE
00070
00080 ;**********************************************************
00090 ; PLAUS READS DATA FROM MAIN STORAGE AT MA-10(X1) AND *
00100 ; STARTS WITH X3 AS INDEX SET TO 0,LOOKS AHEAD A VARIBLE *
00110 ; AMOUNT DEPENDING UPON THE NUMBER OF JUMPS ENCOUNTERED, *
00120 ; STORING DATA IN A SPACE DESIGNATED BY A PREFIX PL IN *
00130 ; PLACE OF THE PREFIX M USED FOR MAIN SPACE. *
00140 ; INDEX (X1) CONTAINS TRUNK(3), PLY(4), AND BRANCH(3) IN *
00150 ; THAT ORDER WHILE (X3) CONTAINS PLY(4) ONLY. *
00160 ; ANOTHER INDEX (X2) CONTAINS THE SAME VALUES AS (X1) BUT *
00170 ; WITHOUT BRANCH. BOARDS FOUND IN PLAUS WHICH MAY HAVE *
00180 ; TO BE SAVED ARE STORED IN TWIG SPACE AND INDEXED BY (X4)*
00190 ; X4 CONTAINS BRANCH(4) AND TWIG(4) *
00200 ; WE ENTER PLAUS INDEXED ONE LEVEL IN PLY BEYOND THE *
00210 ; LEVEL WHERE THE LAST BOARDS HAVE BEEN STORED (-10 SINCE *
00220 ; PLY IS MOVED OVER). X3 IS SET TO ZERO AT THIS LEVEL. *
00230 ;**********************************************************
00240
00250 PL1: SETZM PLFLG
00260 MOVE U2,X2
00270 ANDI U2,PMASK
00280 MOVE Z,LOSE
00290 MOVEM Z,PRUZ-1(U2)
00292 MOVE Z,PRUCT-1(U2)
00293 MOVEM Z,PRUC-1(U2)
00294 MOVE U1,PLDPT
00298 CAILE U2,2
00299 JRST .+4
00300 SKIPE GTCNT0
00302 CAIG U2,1
00303 MOVE U1,REPLYD
00304 HLRZ Z,PL1TAB(U1)
00305 MOVEM Z,TWIGD#
00306 HRRZ Z,PL1TAB(U1)
00307 MOVEM Z,AFTERD#
00310 SETZB X3,X4 ;USED FOR PLY AND TWIG IN PLAUS
00320 MOVE X1,X2 ;RESET X1 FROM X2
00330 LSH X1,3 ;MAKE SPACE FOR BRANCH NUMBER
00340 PL2: MOVE U2,X4
00350 LSH U2,-4
00360 SETZM MJW-1
00370 MOVE A,MA-10(X1)
00380 MOVEM A,PLA-1
00390 MOVE P,MP-10(X1)
00400 MOVEM P,PLP-1
00410 MOVE K,MK-10(X1)
00420 MOVEM K,PLK-1
00430 MOVE Z,MRF-10(X1)
00440 MOVEM Z,PLRF-1
00450 MOVE Z,MLF-10(X1)
00460 MOVEM Z,PLLF-1
00470 MOVE Z,MLB-10(X1)
00480 MOVEM Z,PLLB-1
00490 MOVE Z,MRB-10(X1)
00500 MOVEM Z,PLRB-1
00510 MOVEM A,MOVAA
00520 MOVE U1,MSKIP-10(X1)
00530 MOVEM U1,BSKIP(U2)
00540 ADD U1,PLY-1(X2)
00550 MOVEM U1,PLY(X2)
00560 MOVEM U1,BPLY(U2) ;NEWEST BASE PLY
00570 MOVE Z,WIN
00580 SUB Z,PLY-1(X2)
00590
00600 MOVEM Z,BZ(U2)
00610 XOR U1,SIDE
00620 ANDI U1,1
00630 SKIPE TREE
00640 PUSHJ PDP,TREM ;GET DATA FROM MAIN
00660 MOVE Z,ME-10(X1)
00670 MOVEM Z,EEB-1
00680 MOVE Z,ME2-10(X1)
00690 MOVEM Z,EEB2-1
00700 PL2B: TRC U1,1
00710 MOVEM U1,COLOR
00720 MOVE Z,LOSE
00730 ADD Z,PLY(X2)
00740 MOVEM Z,ZZ-2
00750 ADDI Z,1
00760 MOVEM Z,ZZ-1 ;START WITH LOSING SCORE IN ZZ
00770 PL3: PUSHJ PDP,PUP ;UPDATE USING DATA FROM MAIN
00780 JRST PL11 ;NO MORE MOVES RETURN
00790 SKIPE TREE
00800 PUSHJ PDP,TWIGT
00810 PL4C: MOVEM A,PLA(X3)
00820 MOVEM P,PLP(X3)
00830 MOVEM K,PLK(X3)
00840 MOVEM A,TA(X4)
00850 MOVEM P,TP(X4)
00860 MOVEM K,TK(X4)
00870 PUSHJ PDP,LEGAL ;NORMAL MOVE RETURN, DEFINES TWIG
00880 JRST PL13 ;NO MOVE RETURN FROM LEGAL
00890 AOJA X3,PL4E ;JUMP RETURN
00920 ADDI X3,1 ;NORMAL INDEX OF PLY IN PLAUS
00930 PL4D: MOVE Z,PLRF-1(X3)
00940 MOVEM Z,TRF(X4)
00950 MOVE Z,PLLF-1(X3)
00960 MOVEM Z,TLF(X4)
00970 MOVE Z,PLLB-1(X3)
00980 MOVEM Z,TLB(X4)
00990 MOVE Z,PLRB-1(X3)
01000 MOVEM Z,TRB(X4)
01010 MOVE Z,ZZ-3(X3)
01020 MOVEM Z,ZZ-1(X3)
01030 PUSHJ PDP,PUP ;UPDATE AGAIN TO SEE IF CORRECT PLACE
01040 JRST PL4ERR ;TROUBLE,TREAT AS NO MOVE FROM LEGAL
01050 CAIL X3,16
01060 JRST PL4A ;OUT OF SPACE
01070 SKIPE PLRF-1(X3) ;ARE THERE ANY MOVES LEFT?
01080 JRST PL4A ;YES SO COMPLETE TWIG SAVE
01090 SKIPE PLLF-1(X3)
01100 JRST PL4A
01110 SKIPE PLLB-1(X3)
01120 JRST PL4A
01130 SKIPN PLRB-1(X3) ;STILL NOT READY FOR TWIG SAVE
01140 JRST PL4C
01150 PL4A: MOVEM X3,XTWIG ;COMPLETE TWIG SAVE
01160 MOVEM X3,TSKIP(X4) ;SAVE AS SKIP VALUE
01170 MOVE Z,EEB-1(X3)
01180 MOVEM Z,TE(X4)
01190 MOVE Z,EEB2-1(X3)
01200 MOVEM Z,TE2(X4)
01210 TRNN X3,1
01220 CAIL X3,12 ;STOP AT TWIG IF X3=10
01230 CAMGE X3,TWIGD ;STOP AT TWIG IF G
01240 JRST PL5A ;GO ON
01250 SOJA X3,PL10Z ;BACK TO EVA
01280
01290 PL4E: MOVE Z,EEB-3(X3)
01300 MOVEM Z,EEB-1(X3)
01310 MOVE Z,EEB2-3(X3)
01320 MOVEM Z,EEB2-1(X3)
01325 CAIGE X3,17
01330 JRST PL4D
01335 SOJA X3,PL10Z ;THE BEST THAT CAN BE DONE
01340
01350 PL4B: CAIL X3,10
01360 SOJA X3,PL5E
01370 MOVE Z,ZZ-3(X3)
01380 MOVEM Z,ZZ-1(X3)
01390 PL5: PUSHJ PDP,PUP ;UPDATE AFTER TWIG SAVE
01400 JRST PL8 ;NO MOVE RETURN FROM PUP
01410 PL5A: MOVEM A,PLA(X3)
01420 MOVEM P,PLP(X3)
01430 MOVEM K,PLK(X3)
01440 PUSHJ PDP,LEGAL ;FIND LEGAL MOVES
01450 JRST PL14 ;NO MOVES? FIND OUT MEANING
01460 AOJA X3,PL5C ;JUMPS SO GO DEEPER
01464 TRNN X3,1
01468 JRST .+3
01560 CAMGE X3,AFTERD ;CAN WE STOP
01570 AOJA X3,PL4B ;NO
01580 PL5E: PUSHJ PDP,EVA
01590 CAMG X3,XTWIG ;IS IT SAFE TO ALPHA PRUNE
01600 JRST PL5B
01610 CAMG Z,ZZ-2(X3) ;SCORE LEFT IN Z SO ALPHA TEST
01620 SOJA X3,PL5 ;ALPHA SAYS "PRUNE IT!"
01630 PL5B: MOVNS Z ;CHANGE SIGN FOR BETA TEST
01640 CAMG Z,ZZ-1(X3) ;NOW TEST
01645 JRST PL5
01650 MOVEM Z,ZZ-1(X3) ;REPLACE WITH LARGER VALUE
01655 MOVN U1,U2SAV
01657 MOVEM U1,ZZZ-1(X3)
01660 JRST PL5 ;TEST NEXT MOVE FROM SAME TWIG
01661
01662 PL1TAB: 1000003
01663 1000005
01664 1000007
01665 3000003
01666 3000005
01667 3000007
01668
01675
01676 ;X3 AT EVA VS REPLY,Y FLIT, STEM AND PLAY SETTINGS
01677 ; X3 AT
01678 ;SETTINGS 0 1 2 3 4 5
01679 ;ODD TWIG 1 1 1 3 3 3
01680 ;EVEN TWIG 10 10 10 10 10 10
01681 ;EVEN AFTER 2 2 2 2 2 2
01682 ;ODD AFTER 3 5 7 3 5 7
01683
01690 PL5C: CAIL X3,16 ;CHANGED 11-20-70
01700 SOJA X3,PL5E
01710 MOVE Z,EEB-3(X3)
01720 MOVEM Z,EEB-1(X3)
01730 MOVE Z,EEB2-3(X3)
01740 MOVEM Z,EEB2-1(X3)
01750 JRST PL4B
01760
01770 PL8: MOVN Z,ZZ-1(X3)
01775 MOVN U1,ZZZ-1(X3)
01780 CAMG X3,XTWIG ;EXHAUSTION BACK-UP BUT WHERE
01790 JRST PL10 ;MUST BE JUST AT TWIG-SAVE
01800 CAMG Z,ZZ-2(X3) ;HOW ABOUT BETA
01805 SOJA X3,PL5
01810 MOVEM Z,ZZ-2(X3) ;SAVE AS THE LARGER
01815 MOVEM U1,ZZZ-2(X3)
01820 SOJA X3,PL5 ;BACK UP BY ONE IN PLY
01830
01840 PL4ERR: MOVEI U1,[ASCIZ /INDEXING ERROR: PL4C./]
01850 PUSHJ PDP,PRINT
01860 JRST PL13
01870
01880 PL14: CAMLE X3,XTWIG ;SAFE TO BACK UP?
01890 SOJA X3,PL5 ;YES
01900 PL13: TRNN X3,1
01910 JRST PL13A
01920 MOVE Z,LOSE
01930 ADD Z,PLY(X2)
01940 ADD Z,X3
01950 JRST PL10A
01960 PL13A: MOVE Z,WIN
01970 SUB Z,PLY(X2)
01980 SUB Z,X3
01990 MOVEM Z,ZZ-1
02000 SETZM X3
02010 JRST PL11
02020
02030 PL10Z: PUSHJ PDP,EVA
02040 MOVNS Z
02045 MOVN U1,U2SAV
02050 ;NOW THE NORMAL EXHAUSTION CASE
02060 PL10: TRNN X3,1
02070 MOVNS Z
02080 ADDI X4,1
02090 TRNN X4,17
02100 SUBI X4,1 ;NO MORE ROOM
02110 PL10A: CAMG Z,ZZ-1 ;ZZ-1 NOT INDEXED SINCE X3 ALWAYS = 0 HERE
02115 JRST .+3
02120 MOVEM Z,ZZ-1
02125 MOVEM U1,ZZZ-1
02130 SETZB X3,TA(X4)
02140 JRST PL3 ;GO TO NEXT TWIG
02150
02160 ;TO GET BOARDS FROM OVERFLOW
02170 PL16: CAIGE X4,220
02180 MOVE X1,TRUNK
02190 SKIPG OVA(X1) ;ARE THERE ANY MORE BOARDS
02200 JRST PL17 ;NO, SO IT IS TIME TO SORT SCORES
02210 MOVE U2,X4
02220 LSH U2,-4
02230 MOVE A,OVA(X1)
02240 MOVEM A,PLA-1
02250 MOVE P,OVP(X1)
02260 MOVEM P,PLP-1
02270 MOVE K,OVK(X1)
02280 MOVEM K,PLK-1
02290 MOVE Z,OVRF(X1)
02300 MOVEM Z,PLRF-1
02310 MOVE Z,OVLF(X1)
02320 MOVEM Z,PLLF-1
02330 MOVE Z,OVLB(X1)
02340 MOVEM Z,PLLB-1
02350 MOVE Z,OVRB(X1)
02360 MOVEM Z,PLRB-1
02370 MOVEM A,MOVAA
02380 MOVE Z,WIN
02390 SUB Z,PLY-1(X2)
02400 MOVEM Z,BZ(U2)
02410 MOVE U1,OVSKIP(X1)
02420 MOVEM U1,BSKIP(U2)
02430 ADD U1,PLY-1(X2)
02440 MOVEM U1,PLY(X2)
02450 MOVEM U1,BPLY(U2)
02460 XOR U1,SIDE
02470 ANDI U1,1
02480 SKIPE TREE
02490 PUSHJ PDP,TREOVM ;GET DATA FROM OVERFLOW
02500 MOVE Z,OVE(X1)
02510 MOVEM Z,EEB-1(X3)
02520 MOVE Z,OVE2(X1)
02530 MOVEM Z,EEB2-1(X3)
02540 JRST PL2B
02550
02560 PL11: LSH X4,-4
02570 MOVE Z,ZZ-1
02575 MOVE U1,ZZZ-1
02580 MOVE U2,BSKIP(X4)
02590 MOVEM U2,PSKIP-1(X2)
02600 TRNE U2,1
02605 JRST .+3
02610 MOVNS Z
02615 MOVNS U1
02620 MOVEM Z,BZ(X4)
02625 MOVEM U1,BZZ(X4)
02650 ADDI X4,1
02660 MOVE Z,WIN
02670 SUB Z,PLY(X2)
02680 MOVEM Z,BZ(X4)
02690 LSH X4,4
02700 SETZB X3,TA(X4) ; RESET X3 AND STORE STOP
02710 CAIL X4,200 ;DOES THIS PUT US IN OVERFLOW?
02720 AOJA X1,PL16 ;YES, SO GET NEXT BOARD THERE
02730 SKIPE MA-7(X1) ;IS THERE ANOTHER BRANCH
02740 AOJA X1,PL2
02750
02760
02770 PL17: LSH X4,-4 ;DISCARD TWIG PORTION
02780 MOVE U3,BRUSH-1(X2)
02790 ADD U3,X4
02800 MOVEM U3,BRUSH(X2)
02810 CAIG X4,1
02820 JRST PL17A ;ONLY ONE MOVE
02830 CAILE X4,10 ;IS THERE OVERFLOW?
02840 JRST PL19 ;MERGING NEEDED
02850 SETZM BPTRO ;SET AS FLAG
02860 PUSHJ PDP,SORT
02870 PL18: MOVE X4,BESTM ;NOW MOVE TWIGS
02880 SUBI X4,1
02890 MOVE U3,X2
02900 MOVE U1,PSKIP-2(U3)
02910 TRNN U1,1
02920 SOJA U3,.-2
02930 ANDI U3,PMASK
02940 MOVE Z,S-2(U3)
02950 MOVNM Z,ZS
02960 MOVE U2,X2
02970 ANDI U2,PMASK
02980 CAMLE U2,U2MAX
02990 MOVEM U2,U2MAX
03000 MOVE U1,BPLY(X4)
03010 MOVEM U1,PLY(X2)
03020 MOVE U1,BSKIP(X4)
03030 MOVEM U1,PSKIP-1(X2)
03040 TRNN U1,1
03050 MOVE Z,S-1(U2)
03060 MOVEM Z,S(U2)
03070 SKIPE TREE
03080 PUSHJ PDP,MTRE ;PRINT SELECTED MOVE
03090 MOVN Z,BZ(X4)
03100 CAMGE Z,GOOD
03103 CAMG Z,BAD ;STOP IF GOOD OR BAD
03106 JRST PL17C
03120 MOVE U2,X2
03130 ANDI U2,PMASK
03140 CAMLE U2,WIDTH
03150 SKIPN FLIT
03160 JRST PL18D
03170 SKIPN STEM
03180 JRST PL18D
03190 MOVE U1,BSKIP(X4)
03200 CAIL U1,2
03210 JRST PL18D
03220 MOVE U3,BRUSH(X2)
03230 LSH U3,1
03240 CAMGE U3,DEPTHM
03250 JRST PL18D
03260 CAMG Z,S-1(U2)
03270 JRST SET9A
03280 CAML Z,ZS
03290 JRST SET9
03300 PL18D: LSH X4,4 ;ALLOW FOR TWIGS (4 BITS)
03310 MOVE X1,X2
03320 LSH X1,3 ;MAKE SPACE HERE ALSO
03330 MOVEI U1,10 ;COUNT BRANCHES STORED IN MAIN
03340 SORT13: MOVE U2,TA(X4)
03350 MOVEM U2,MA(X1) ;THIS IS THE CORRECT LEVEL
03360 JUMPE U2,SORT16 ;LAST TWIG HAS BEEN STORED
03370 MOVE U2,TK(X4)
03380 MOVEM U2,MK(X1)
03390 MOVE U2,TP(X4)
03400 MOVEM U2,MP(X1)
03410 MOVE U2,TRF(X4)
03420 MOVEM U2,MRF(X1)
03430 MOVE U2,TLF(X4)
03440 MOVEM U2,MLF(X1)
03450 MOVE U2,TLB(X4)
03460 MOVEM U2,MLB(X1)
03470 MOVE U2,TRB(X4)
03480 MOVEM U2,MRB(X1)
03490 MOVE U2,TSKIP(X4)
03500 MOVEM U2,MSKIP(X1)
03510 MOVE U2,TE(X4)
03520 MOVEM U2,ME(X1)
03530 MOVE U2,TE2(X4)
03540 MOVEM U2,ME2(X1)
03550 SKIPE TREE
03560 PUSHJ PDP,TRETM ;FROM TWIG TO MAIN
03570 ADDI X4,1
03580 SOJLE U1,SORT14 ;STOP IF MAIN IS FILLED
03590 AOJA X1,SORT13 ;GET NEXT TWIG
03600
03610 TRETM: MOVE U2,MOVA(X4)
03620 MOVEM U2,MMOVA(X1)
03630 MOVE U2,MOVP(X4)
03640 MOVEM U2,MMOVP(X1)
03650 POPJ PDP,
03660
03670 PL17A: JUMPE X4,PL17C ;NONE ACCEPTABLE
03680 MOVEM X4,BESTM
03690 SETZM BPTR-1(X2)
03700 JRST PL18
03710
03860 PL17C: MOVE U2,X2
03870 ANDI U2,PMASK
03880 MOVN Z,BZ(X4)
03890 CAMLE Z,S-1(U2)
03900 JRST SET9
03910 JRST SET9A
03920
03930
03940 TREM: MOVE U2,X4
03950 LSH U2,-4
03960 MOVE Z,MMOVA-10(X1)
03970 MOVEM Z,MVAA(U2)
03980 MOVE Z,MMOVP-10(X1)
03990 MOVEM Z,MVPP(U2)
04000 MOVE Z,MSKIP-10(X1)
04010 MOVEM Z,MMSKIP(U2)
04020 POPJ PDP,
04030
04040 TREOVM: MOVE U2,X4
04050 LSH U2,-4
04060 MOVE Z,OVMOVA(X1)
04070 MOVEM Z,MVAA(U2)
04080 MOVE Z,OVMOVP(X1)
04090 MOVEM Z,MVPP(U2)
04100 MOVE Z,OVSKIP(X1)
04110 MOVEM Z,MMSKIP(U2)
04120 POPJ PDP,
04130
04140 ;WE MUST PUT THE REST IN THE OVERFLOW REGION
04150 SORT14: MOVE U1,TRUNK
04160 MOVEI U3,10
04170 SORT15: MOVE U2,TA(X4)
04180 MOVEM U2,OVA(U1)
04190 JUMPE U2,SORT16 ;LAST TWIG
04200 MOVE U2,TP(X4)
04210 MOVEM U2,OVP(U1)
04220 MOVE U2,TK(X4)
04230 MOVEM U2,OVK(U1)
04240 MOVE U2,TRF(X4)
04250 MOVEM U2,OVRF(U1)
04260 MOVE U2,TLF(X4)
04270 MOVEM U2,OVLF(U1)
04280 MOVE U2,TLB(X4)
04290 MOVEM U2,OVLB(U1)
04300 MOVE U2,TRB(X4)
04310 MOVEM U2,OVRB(U1)
04320 MOVE U2,TSKIP(X4)
04330 MOVEM U2,OVSKIP(U1)
04340 MOVE U2,TE(X4)
04350 MOVEM U2,OVE(U1)
04360 MOVE U2,TE2(X4)
04370 MOVEM U2,OVE2(U1)
04380 SKIPE TREE
04390 PUSHJ PDP,TREOV ;FROM TWIG TO OVERFLOW
04400 ADDI X4,1
04410 SOJLE U3,SORT16
04420 AOJA U1,SORT15 ;GET NEXT ONE
04430
04440 TREOV: MOVE U2,MOVA(X4)
04450 MOVEM U2,OVMOVA(U1)
04460 MOVE U2,MOVP(X4)
04470 MOVEM U2,OVMOVP(U1)
04480 POPJ PDP,
04490
04500 ;ALL TWIGS HAVE BEEN SAVED
04510
04520 SORT16: ADDI X2,1 ;INDEX TO NEXT LEVEL
04525 SKIPE FLIT
04530 JRST SRT16E
04535 MOVE U1,PLY-1(X2)
04550 SETZM GETF3
04555 MOVE X4,BESTM
04560 MOVN Z,BZ-1(X4)
04561 MOVN U3,BZZ-1(X4)
04562 MOVE U1,BSKIP-1(X4)
04563 TRNE U1,1 ;EVEN SKIP
04564 JRST .+3
04565 MOVNS Z ;YES
04566 MOVNS U3
04570 MOVE U1,PLY-1(X2)
04572 TRNE U1,1
04574 JRST .+3
04576 MOVNS Z
04578 MOVNS U3
04612 MOVEM Z,FLITZ#
04613 CAML Z,[-2000000]
04614 JRST SRT16Z
04615 SRT16Y: SKIPN TREE
04616 JRST .+5
04617 MOVEI U1,[ASCIZ / BAD TRUNK /]
04618 PUSHJ PDP,PRINT
04619 MOVEI U1,2
04620 ADDM U1,TREEX
04621 SKIPN U5,ORDER
04622 JRST EXIT
04623 SETZ X5,
04624 LSHC X5,4
04625 JRST SORT2A
04626 SRT16Z: MOVE U2,X2
04630 LSH U2,-PSHIFT
04640 ADDI U2,1
04650 MOVEM X2,FLX2-1(U2)
04660 MOVEM Z,FLZZ-1(U2)
04662 ADD U3,[103103103103] ;4 TERMS OF 9 BITS EACH
04665 MOVSM U3,FLZZZ-1(U2)
04670 EXCH Z,BEST
04680 CAMN Z,WIN
04690 JRST SRT16D ;MUST TRY ALL TRUNKS
04700 SKIPE GETF1
04710 JRST SRT16C ;WOOPS STILL MORE TRUNKS
04720 SKIPE COUNTZ
04730 JRST SRT16X
04740 MOVE U1,COUNT
04750 MOVEM U1,COUNTZ
04762 MOVE U5,COUNTM
04764 SUB U5,COUNT
04766 MOVEM U5,COUNTM
04768 MOVE U1,DEPTHM
04776 MOVEM U1,DEPTHZ
04784 MOVEI U3,4
04786 CAML U5,COUNT
04788 JRST .+5
04790 IMULI U5,5
04792 LSH U5,-2
04793 MOVNS U3
04794 CAMG U5,COUNT
04795 ADD U1,U3
04799 MOVEM U1,DEPTHM
04800 SETZM DEPTHZ+1
04810 SETZM COUNTZ+1
04820 SRT16X: SETZM COUNTX
04830 MOVE U1,STEMD
04840 MOVEM U1,PLDPT
04850 CAMLE Z,BEST ;STILL EXCHANGED, REMEMBER?
04860 JRST SRT16D ;SHOULD STILL SWAP
04870 EXCH Z,BEST ;RESTORE BEST
04880 SRT16E: MOVE Z,EEB-1
04890 MOVEM Z,EEB-2 ;BACKUP PREPARE
04900 MOVE Z,EEB2-1
04910 MOVEM Z,EEB2-2
04920 SRT16F: MOVE U2,X2
04930 ANDI U2,PMASK
04940 JUMPE U2,TIP ;OUT OF SPACE
04945 MOVE Z,BEST
04946 CAMN Z,WIN
04947 JRST PL1 ;KEEP GOING IN THIS CASE
04950 CAMG U2,WIDTH
04960 JRST PL1
04970 MOVE U1,PLY-1(X2)
04980 CAIL U1,20
04990 JRST TIP
05000 MOVE U1,BRUSH-1(X2)
05010 CAML U1,DEPTHM
05020 JRST TIP
05030 JRST PL1
05040
05050 SRT16C: SETOM GETF3
05060 SRT16D: EXCH Z,BEST ;RESTORE Z
05070 MOVE U3,ORDER ;FIRST, MERGE ORDER
05080 SETZB X3,U5
05090 SORT17: LSHC X3,4
05100 JUMPE X3,SORT18
05110 CAMLE Z,FLZZ-1(X3)
05120 JRST SORT18
05130 LSH U5,4
05140 IOR U5,X3
05150 SETZM X3
05160 JRST SORT17
05170 SORT18: LSH U5,4
05180 IOR U5,U2
05190 SORT19: JUMPE X3,SORT20
05200 LSH U5,4
05210 IOR U5,X3
05220 SETZM X3
05230 LSHC X3,4
05240 JRST SORT19
05250 SORT20: SKIPN GETF3 ;ARE THERE OVERFLOW TRUNKS?
05260 JRST SORT21 ;NO, SO GO AHEAD ANYWAY
05270 MOVE X4,U5 ;REPLACE POOREST TRUNK
05280 ANDI X4,17 ;SAVE POOREST POINTER
05290 XOR U5,X4 ;DELETE FROM ORDER
05300 MOVEM X4,X4S ;SAVE
05310 SETZM X5
05320 LSHC X5,4
05330 JUMPE X5,.-1 ;LEFT JUSTIFY
05340 MOVE Z,FLX2-1(X5)
05350 MOVEM Z,BEST ;RESET BEST AFTER MERGE
05360 LSHC X5,-4
05370 MOVEM U5,ORDER
05380 SKIPE TREE
05390 PUSHJ PDP,RETREE
05400 MOVEI X3,1
05410 MOVE U1,SIDE
05420 MOVEM U1,COLOR
05430 MOVE A,PLAS ;FIX UP TO GET NEXT TRUNK
05440 MOVEM A,PLA-1(X3)
05450 MOVE P,PLPS
05460 MOVEM P,PLP-1(X3)
05470 MOVE K,PLKS
05480 MOVEM K,PLK-1(X3)
05490 MOVE PLSKS
05500 MOVEM PLSKIP-1(X3)
05510 MOVE Z,PLRFS
05520 MOVEM Z,PLRF-1(X3)
05530 MOVE Z,PLLFS
05540 MOVEM Z,PLLF-1(X3)
05550 MOVE Z,PLLBS
05560 MOVEM Z,PLLB-1(X3)
05570 MOVE Z,PLRBS
05580 MOVEM Z,PLRB-1(X3)
05590 MOVE Z,PLMJS
05600 MOVEM Z,MJW-1(X3)
05610 SETOM GETF2
05620 SUBI X4,1
05630 PUSHJ PDP,GET ;GET NEW TRUNK
05640 SKIPE TREE
05650 PUSHJ PDP,TERPRI
05660 SUBI X4,1
05670 JRST PLAY2
05680
05690 SORT21: SETZ X5,
05700 LSHC X5,4
05710 JUMPE X5,.-1 ;LEFT JUSTIFY AND STRIP OFF BEST
05720 SORT2A: MOVEM U5,ORDER
05730 MOVE X2,FLX2-1(X5)
05740 MOVE X4,X2
05750 TRNN X4,PMASK
05760 SUBI X4,PSIZE
05770 LSH X4,3-PSHIFT
05780 TRZ X4,7
05790 MOVEM X4,TRUNK ;NEW VALUE
05800 SKIPE TREE
05810 PUSHJ PDP,FLTREE
05820 SETZ X5,
05830 LSHC X5,4
05840 MOVE Z,FLZZ-1(X5)
05850 MOVEM Z,BEST
05860 SKIPN U5,ORDER2
05870 JRST SORT22
05880 CAML Z,BEST2
05890 JRST SORT22
05900 EXCH Z,BEST2
05910 MOVEM Z,BEST
05920 EXCH U5,ORDER
05930 MOVEM U5,ORDER2
05940 SORT22: TRNN X2,PMASK
05950 JRST TIP
05960 MOVE U1,BRUSH-1(X2)
05970 CAML U1,DEPTHM
05980 JRST TIP
05990 JRST PL1
06000
06010 PL19: MOVEM X4,X4S
06020 CAIE X4,11
06030 JRST PL20
06040 MOVEM X4,BESTO ;NO SECOND SORT NEEDED
06050 SETZM BPTRO
06060 JRST PL21
06070 PL20: PUSHJ PDP,SORT ;SORT OVERFLOW
06080 MOVEM X3,BESTO ;SAVE OVERFLOW SORT RESULTS
06090 MOVEM U3,BPTRO ;SAVE OVERFLOW POINTER
06100 PL21: MOVEI X4,10
06110 PUSHJ PDP,SORT
06120 MOVE U1,BESTO ;BEST OVERFLOW POINTER
06130 MOVE Z,BZ-1(U1) ;OVERFLOW BEST Z
06140 MOVE U2,WORSTM
06150 CAMLE Z,BZ-1(U2) ;COMPARE WITH MAIN WORST
06160 JRST PL18 ;OVERFLOW CAN BE DISCARDED
06170 MOVE X4,BESTM
06180 CAMLE Z,BZ-1(X4) ;IS OVERFLOW BEST REALLY BEST?
06190 JRST PL22 ;NO, TOO BAD, MORE WORK AHEAD
06200 LSHC X3,-4 ;YES, PUT MAIN BEST BACK ON LIST
06210 MOVEM U3,BPTR-1(X2)
06220 MOVE X4,U1 ;PREPARE TO SAVE TWIGS
06230 MOVEM U1,BESTM ;CALL THIS BESTM NOW
06240 JRST MERGE ;GO ON FROM HERE
06250 PL22: MOVE X3,U1 ;RESTORE BESTO TO ITS LIST
06260 MOVE U3,BPTRO
06270 LSHC X3,-4
06280 MOVEM U3,BPTRO
06290
06300 MERGE: MOVE U3,BPTR-1(X2) ;GET BEST 8 TO SAVE
06310 MOVE U5,BPTRO
06320 JUMPE U5,PL18
06330 SETZB X3,X5
06340 SETZB Q,A
06350 MOVEI U1,7 ;SAVE ONLY 7 MORE
06360 LSHC X5,4
06370 LSHC X3,4
06380 MERGE2: MOVE Z,BZ-1(X5)
06390 MERGE3: JUMPE X5,MERGE4 ;DON'T SORT IF THERE ARE NO MORE
06400 CAMG Z,BZ-1(X3) ;GIVE PREFERENCE TO MAIN
06410 JRST MERGE6
06420 MERGE4: IOR A,X3
06430 LSH A,4
06440 MOVEI X3,0
06450 LSHC X3,4
06460 SOJG U1,MERGE3
06470 MERGE5: LSH A,4
06480 JUMPN Q,MERGE7
06490 MOVEM A,BPTR-1(X2)
06500 JRST PL18
06510 MERGE6: IOR A,X5
06520 LSH A,4
06530 IOR Q,X5
06540 MOVEI X5,0
06550 LSHC X5,4
06560 SOJLE U1,MERGE5
06570 JUMPN X5,MERGE2
06580 JRST MERGE4
06590 MERGE7: MOVE U5,A
06600 MOVEI U1,7
06610 MOVEI A,0
06620 MERGE8: MOVEI X5,0
06630 LSHC X5,4
06640 CAILE X5,10
06650 JRST MERG12
06660 IOR A,X5
06670 LSH A,4
06680 SOJG U1,MERGE8
06690 MERGE9: LSH A,4
06700 MOVEM A,BPTR-1(X2)
06710 JRST PL18
06720
06730 MERG12: IOR A,X3
06740 LSH A,4
06750 SUBI X3,1
06760 SUBI X5,11 ;FORM FOR OVERFLOW SPACE
06770 MOVE X1,X2
06780 LSH X1,3
06790 IOR X1,X3
06800 IOR X5,TRUNK ;GET PROPER TRUNK OVERFLOW NUMBER
06810 MOVE U2,OVA(X5) ;MOVE DATA FROM OVERFLOW TO MAIN
06820 MOVEM U2,MA-10(X1)
06830 MOVE U2,OVP(X5)
06840 MOVEM U2,MP-10(X1)
06850 MOVE U2,OVK(X5)
06860 MOVEM U2,MK-10(X1)
06870 MOVE U2,OVRF(X5)
06880 MOVEM U2,MRF-10(X1)
06890 MOVE U2,OVLF(X5)
06900 MOVEM U2,MLF-10(X1)
06910 MOVE U2,OVLB(X5)
06920 MOVEM U2,MLB-10(X1)
06930 MOVE U2,OVRB(X5)
06940 MOVEM U2,MRB-10(X1)
06950 MOVE U2,OVSKIP(X5)
06960 MOVEM U2,MSKIP-10(X1)
06970 MOVE U2,OVE(X5)
06980 MOVEM U2,ME-10(X1)
06990 MOVE U2,OVE2(X5)
07000 MOVEM U2,ME2-10(X1)
07010 SKIPE TREE
07020 PUSHJ PDP,TREMRG
07030 MOVEI X3,0
07040 LSHC X3,4
07050 SOJG U1,MERGE8
07060 JRST MERGE9
07070
07080 TREMRG: MOVE U2,OVMOVA(X5)
07090 MOVEM U2,MMOVA-10(X1)
07100 MOVE U2,OVMOVP(X5)
07110 MOVEM U2,MMOVP-10(X1)
07120 POPJ PDP,
07130
07140
07150 SUBTTL SORT -- A. SAMUEL
07160 PAGE
07170
07180 ;*********************************************
07190 ; SORT IS A ROUTINE THAT SORTS INDEXES *
07200 ; REFERENCING DATA ARRANGING IN ASSENDING *
07210 ; ORDER THE TAGS CONTAINED IN BZ-1. IT DOES *
07220 ;THIS BY SIMULATING A 4 TAPE SORT IN 4 *
07230 ; REGESTERS. *
07240 ;*********************************************
07250
07260
07270 SETUPA: BYTE (4)0
07280 BYTE (4)1
07290 BYTE (4)1
07300 BYTE (4)1,2
07310 BYTE (4)1,2
07320 BYTE (4)1,2,3
07330 BYTE (4)1,2,3
07340 BYTE (4)1,2,3,4
07350 BYTE (4)1,2,3,4
07360 BYTE (4)11
07370 BYTE (4)11
07380 BYTE (4)11,12
07390 BYTE (4)11,12
07400 BYTE (4)11,12,13
07410 BYTE (4)11,12,13
07420 BYTE (4)11,12,13,14
07430 BYTE (4)11,12,13,14
07440
07450 SETUPB: BYTE (4)0
07460 BYTE (4)0
07470 BYTE (4)2
07480 BYTE (4)3
07490 BYTE (4)3,4
07500 BYTE (4)4,5
07510 BYTE (4)4,5,6
07520 BYTE (4)5,6,7
07530 BYTE (4)5,6,7,10
07540 BYTE (4)0
07550 BYTE (4)12
07560 BYTE (4)13
07570 BYTE (4)13,14
07580 BYTE (4)14,15
07590 BYTE (4)14,15,16
07600 BYTE (4)15,16,17
07610 BYTE (4)15,16,17 ;HANDLES ONLY 15
07620
07630
07640 SORT: MOVE U3,SETUPA(X4) ;SET UP INPUT REGISTERS
07650 MOVE U5,SETUPB(X4)
07660 SETZB X3,X5 ;ZERO SAMPLING REGISTERS
07670 SETZB A,K ;ZERO OUTPUT REGISTERS
07680 LSHC X3,4
07690 LSHC X5,4
07700 SORTA: MOVE Z,BZ-1(X3)
07710 CAMG Z,BZ-1(X5) ;FIND SMALLEST
07720 JRST SORT1
07730 EXCH U3,U5 ;SWAP IF NECESSARY
07740 EXCH X3,X5
07750 SORT1: MOVE Q,X3
07760 LSH A,4 ;MAKE ROOM
07770 IOR A,X3
07780 SETZ X3,
07790 JUMPE U3,SORT5 ;NO MORE ON U3, USE U5
07800 LSHC X3,4 ;GET NEXT ENTRY
07810 MOVE Z,BZ-1(X3)
07820 CAMG Z,BZ-1(X5)
07830 JRST SORT2
07840 EXCH X3,X5
07850 EXCH U3,U5 ;MUST SWITCH BOTH
07860 SORT2: MOVE Z,BZ-1(Q) ;WILL IT GO
07870 CAMG Z,BZ-1(X3)
07880 JRST SORT1 ;YES
07890 CAMLE Z,BZ-1(X5) ;MAYBE X5 WILL GO
07900 JRST SORT6 ;NO, SO SWITCH OUTPUTS
07910 SORT3: MOVE Q,X5 ;YES, MOVE X5 AND STICK WITH THIS INPUT
07920 LSH A,4 ;MAKE ROOM
07930 IOR A,X5
07940 SETZ X5,
07950 JUMPN U5,SORT4 ;ARE THER MORE
07960 JUMPE X3,SORT7 ;END OF PASS
07970 EXCH X3,X5
07980 EXCH U3,U5 ;SWITCH INPUTS
07990 EXCH A,K ;SWITCH OUTPUTS
08000 JRST SORT3 ;START WITH ONE
08010 SORT4: LSHC X5,4
08020 SORT5: MOVE Z,BZ-1(Q)
08030 CAMG Z,BZ-1(X5)
08040 JRST SORT3 ;CONTINUE WITH U5
08050 SORT6: EXCH A,K ;SWITCH OUTPUTS
08060 JUMPN X3,SORT1 ;CONTINUE FROM U3
08070 JRST SORT3
08080 SORT7: JUMPE K,SORT8 ;EVERYTHING IS ON A
08090 EXCH U3,A ;INTERCHANGE IN AND OUT
08100 EXCH U5,K
08110 LSHC X3,4
08120 JUMPE X3,.-1 ;LEFT JUSTIFY AND GET FIRST IN X3
08130 LSHC X5,4
08140 JUMPE X5,.-1 ;DITTO
08150 JRST SORTA ;GO AROUND AGAIN
08160 SORT8: MOVE U3,A
08170 JUMPE U3,.+3
08180 LSHC X3,4
08190 JUMPE X3,.-1 ;LEFT JUSTIFY
08200 MOVEM X3,BESTM ;SAVE INDEX TO BEST
08210 ANDI A,17
08220 MOVEM A,WORSTM ;SAVE INDEX TO WORST
08230 MOVEM U3,BPTR-1(X2)
08240 POPJ PDP,
08250
08260
00010 SUBTTL TIP -- A. SAMUEL
00020 PAGE
00030
00040 ;*****************************************************
00050 ; TIP IS A PART OF THE MAIN ROUTINE WHICH HANDLES *
00060 ; TIPPING OFF OF A BRANCH. IT IS SIMILAR TO PLAUS IN *
00070 ; INPUT REQUIREMENTS BUT IT TRANSFERS CONTROL TO SET.*
00080 ;*****************************************************
00090
00100 TIP: SETOM FLIT ;STOP FLITTING
00105 SETZM BUFFFF#
00110 SETZB X3,X4
00120 MOVE X1,X2 ;PREPARE TO GET BOARD
00130 LSH X1,3 ;START AT FIRST BRANCH
00140 SKIPA
00150 TIP1: AOS X4
00160 SETZM MJW-1
00170 CAIGE X4,10 ;ARE WE USING BOARDS FROM OVERFOLW
00180 JRST TIP1A ;NO, SO GET BOARD FROM MAIN
00190 CAIG X4,10
00200 MOVE X1,TRUNK ;FIRST TIME IN OVERFLOW
00210 SKIPG OVA(X1)
00220 JRST SET10 ;NO MORE BOARDS
00230 SKIPE TREE
00240 PUSHJ PDP,TIPTOV
00250 MOVE U2,OVSKIP(X1)
00260 MOVE U1,OVE2(X1)
00270 MOVE Z,OVE(X1)
00280 JRST TIP1B
00290 TIP1A: SKIPG MA-10(X1)
00300 JRST SET10 ;NO MORE BOARDS
00310 SKIPE TREE
00320 PUSHJ PDP,TIPT
00330 MOVE U2,MSKIP-10(X1)
00340 MOVE U1,ME2-10(X1)
00350 MOVE Z,ME-10(X1)
00360 TIP1B: MOVEM U2,TISKIP
00370 ADD U2,PLY-1(X2)
00380 MOVEM U2,TIPPLY# ;PLY IN X2 MAY OVERFLOW
00390 XOR U2,SIDE
00400 ANDI U2,1
00410 SETZM EEBFLF
00420 MOVEM U1,EEB2-1(X3)
00430 MOVEM Z,EEB-1(X3)
00440 MOVE U1,TISKIP
00450 TRC U2,1
00460 MOVEM U2,COLOR
00470 MOVE U2,X2
00480 ANDI U2,PMASK
00490 SKIPN U2
00500 ADDI U2,PSIZE ;OVERFLOW IS POSSIBLE
00510 MOVEM U2,U2S ;NEEDED IN TIP7
00520 MOVE Z,S-1(U2)
00530 TRNN U1,1 ;U1 CONTAINS PROPER SKIP
00540 JRST TIP1C
00550 MOVEM Z,ZZ-2(X3)
00560 MOVE U2,X2
00570 MOVE U1,PSKIP-2(U2)
00580 TRNN U1,1
00590 SOJA U2,.-2
00600 ANDI U2,PMASK
00610 SKIPN U2
00620 ADDI U2,PSIZE
00630 MOVEM U2,U2SS ;NEEDED IN TIP7
00640 MOVE Z,S-2(U2)
00650 MOVEM Z,ZZ-1(X3)
00660 JRST TIP1D
00670 TIP1C: MOVEM Z,ZZ-1(X3)
00680 MOVE U2,X2
00690 MOVE U1,PSKIP-2(U2)
00700 TRNN U1,1
00710 SOJA U2,.-2
00720 ANDI U2,PMASK
00730 SKIPN U2
00740 ADDI U2,PSIZE
00750 MOVEM U2,U2SS
00760 MOVE Z,S-2(U2)
00770 MOVEM Z,ZZ-2(X3)
00780 TIP1D: CAIGE X4,10 ;TEST AGAIN
00790 JRST TIP3
00800 PUSHJ PDP,OVUP
00810 JRST TIP7
00820 JRST TIP4
00830
00840 TIP3: PUSHJ PDP,MUP
00850 JRST TIP7 ;NO MORE MOVES
00860 TIP4: SKIPE TREE
00870 PUSHJ PDP,TIPT2
00880 MOVEM A,PLA(X3)
00890 MOVEM P,PLP(X3)
00900 MOVEM K,PLK(X3)
00910 PUSHJ PDP,LEGAL
00920 JRST TIP8 ;NO LEGAL MOVES
00930 AOJA X3,TIP4A
00940 TRNN X3,1
00950 SETOM EEBFLF
00960 AOJA X3,TIP5
00970
00980 TIP4A: MOVE Z,EEB-3(X3)
00990 MOVEM Z,EEB-1(X3)
01000 MOVE Z,EEB2-3(X3)
01010 MOVEM Z,EEB2-1(X3)
01020 CAIL X3,10
01030 SOJA X3,TIP5E
01040 TIP5: MOVE Z,ZZ-3(X3)
01050 MOVEM Z,ZZ-1(X3)
01060 TIP5A: PUSHJ PDP,PUP
01070 JRST TIP6 ;NO MORE MOVES
01080 SKIPE TREE
01090 PUSHJ PDP,TIPT3
01100 MOVEM A,PLA(X3)
01110 MOVEM P,PLP(X3)
01120 MOVEM K,PLK(X3)
01130 PUSHJ PDP,LEGAL
01140 JRST TIP10 ;NO LEGAL MOVE
01150 AOJA X3,TIP4A ;JUMP MOVE
01160 TRNN X3,1
01170 SETOM EEBFLF
01180 CAIL X3,6
01190 JRST TIP5E
01200 SKIPN EEBFLF
01210 AOJA X3,TIP5 ;MUST FIND NECESSARY EV
01220 TIP5E: PUSHJ PDP,EVA ;NOW A FULL FINAL EVAL
01230 TIP5C: SKIPE TREE
01240 PUSHJ PDP,TREEMP
01250 MOVM U5,Z
01260 CAILE U5,400000 ;MARGIN EXEMPTION LEVEL
01270 JRST .+7
01280 LSH U5,-4 ;DIVIDE BY 16
01290 MOVNS U5
01300 ADD U5,Z
01310 CAMLE U5,ZZ-2(X3)
01320 JRST TIP5B
01330 JRST .+3
01340 CAMLE Z,ZZ-2(X3) ;DOES ALPHA LIKE?
01350 JRST TIP5B ;YES
01360 SOJG X3,TIP5A ;NO, SO CAN WE PUP?
01370 JRST TIP1D ;NO, MUST MUP
01380 TIP5B: MOVNS Z ;MUST CHANGE SIGN TO COMPARE WITH BETA
01390 CAMLE Z,ZZ-1(X3) ;DOES BETA LIKE?
01400 MOVEM Z,ZZ-1(X3) ;YES, SO WE GET NEW BETA
01410 JRST TIP5A ;AND TRY A NEW BRANCH
01420
01430 TIP6: MOVE Z,ZZ-1(X3)
01440 SUBI X3,1 ;CAN BACK 1 AT LEAST
01450 MOVM U5,Z
01460 CAILE U5,400000 ;MARGIN EXEMPTION LEVEL
01470 JRST .+7
01480 LSH U5,-4 ;DIVIDE BY 16
01490 MOVNS U5
01500 ADD U5,Z
01510 CAMG U5,ZZ-2(X3)
01520 JRST TIP6A
01530 JRST .+3
01540 CAMG Z,ZZ-2(X3) ;CAN WE PRUNE?
01550 JRST TIP6A ;YES, ALPHA DOES NOT LIKE
01560 MOVNS Z
01570 CAMLE Z,ZZ-1(X3) ;DOES BETA LIKE?
01580 MOVEM Z,ZZ-1(X3) ;YES
01590 JUMPG X3,TIP5A ;GO TO PUP IF X3 > 0
01600 JRST TIP1D ;ELSE GO TO MUP
01610 TIP6A: JUMPG X3,TIP6B
01620 MOVE U1,TISKIP
01630 TRNE U1,1
01640 AOJA X1,TIP1
01650 MOVE U1,PSKIP-2(X2)
01660 TRNN U1,1
01670 SOJA X2,.-2
01680 JRST SET
01690
01700 TIP6B: SOJG X3,TIP5A
01710 JRST TIP1D
01720
01730
01740
01750 ;AFTER MUP EXHAUSTION
01760 TIP7: MOVE Z,ZZ-1(X3)
01770 MOVE U1,TISKIP
01780 TRNN U1,1
01790 MOVNS Z
01800 MOVE U2,U2SS
01810 MOVM U5,Z
01820 CAILE U5,400000 ;MARGIN EXEMPTION LEVEL
01830 JRST .+7
01840 LSH U5,-4 ;DIVIDE BY 16
01850 MOVNS U5
01860 ADD U5,Z
01870 CAMLE U5,S-2(U2)
01880 JRST TIP7A
01890 JRST .+3
01900 CAMLE Z,S-2(U2)
01910 JRST TIP7A
01920 TRNN X2,PMASK
01930 SUBI X2,1 ;PLY OVERFLOW CASE
01940 ANDI X2,PSIZE*20-PSIZE ;ALPHA WANTS NEW SET
01950 ADD X2,U2 ;U2 MAY BE 10
01960 JRST SET
01970 TIP7A: MOVNS Z
01980 MOVE U2,U2S
01990 CAMLE Z,S-1(U2)
02000 MOVEM Z,S-1(U2)
02010 AOJA X1,TIP1
02020
02030 TIP8: MOVE Z,LOSE
02040 ADD Z,TIPPLY
02050 ADD Z,X3
02060 SKIPE TREE
02070 PUSHJ PDP,TREES
02080 MOVNM Z,ZZ-1(X3)
02090 JRST TIP7
02100
02110
02120 TIP10: MOVE Z,LOSE
02130 ADD Z,TIPPLY
02140 ADD Z,X3
02150 JRST TIP5C
02160
00010 SUBTTL TREES -- A. SAMUEL
00020 PAGE
00030 SETT3: MOVE Z,MOVAA
00040 MOVEM Z,MMOVA(X1)
00050 MOVE Z,MOVPP
00060 MOVEM Z,MMOVP(X1)
00070 POPJ PDP,
00080
00090 SETT5: MOVE Z,MOVAA
00100 MOVEM Z,OVMOVA(X1)
00110 MOVE Z,MOVPP
00120 MOVEM Z,OVMOVP(X1)
00130 POPJ PDP,
00140
00150 TWIGT: MOVE Z,MOVAA
00160 MOVEM Z,MOVA(X4)
00170 MOVEM P,MOVP(X4)
00180 POPJ PDP,
00190
00200 TIPTOV: MOVE U3,OVSKIP(X1)
00210 MOVE U5,OVMOVA(X1)
00220 MOVE U4,OVMOVP(X1)
00230 MOVE U2,PLY-1(X2)
00240 MOVEI U1,[ASCIZ /:/]
00250 MOVEM U1,DOTFLG
00260 JRST TRESTR
00270
00280 TIPT: MOVE U3,MSKIP-10(X1)
00290 MOVE U5,MMOVA-10(X1)
00300 MOVE U4,MMOVP-10(X1)
00310 MOVE U2,PLY-1(X2)
00320 MOVEI U1,[ASCIZ /;/]
00330 MOVEM U1,DOTFLG
00340 JRST TRESTR
00350
00360 TIPT2: SKIPE X3
00370 POPJ PDP,
00380 MOVE U5,MOVAA
00390 MOVE U4,P
00400 MOVE U2,TIPPLY
00410 MOVEI U3,1
00420 MOVEI U1,[ASCIZ / /]
00430 TRNE U2,1
00440 MOVEI U1,[ASCIZ /,/]
00450 MOVEM U1,DOTFLG
00460 JRST TRESTR
00470
00480 TIPT3: MOVE U5,PLA-1(X3)
00490 MOVE U4,P
00500 MOVE U2,TIPPLY
00510 ADD U2,X3
00520 MOVEI U3,1
00530 MOVEI U1,[ASCIZ / /]
00540 TRNE U2,1
00550 MOVEI U1,[ASCIZ /,/]
00560 MOVEM U1,DOTFLG
00570 JRST TRESTR
00580
00590 MAS: Z
00600
00610 GTREE: MOVEI U1,[ASCIZ / /]
00620 MOVEM U1,DOTFLG
00630 MOVE U5,IA
00640 MOVE U4,MOP(X4)
00650 MOVEI U2,0
00660 MOVEI U3,1
00670 PUSHJ PDP,TREE1
00680 MOVEI U1,[ASCIZ / TRUNK NUMBER /]
00690 PUSHJ PDP,PRINT
00700 MOVE U1,X4
00710 ADDI U1,1
00720 PUSHJ PDP,NUMOUT
00730 PUSHJ PDP,TERPRI
00740 SETZM BUFFF2
00750 MOVEI U1,20
00760 MOVEM U1,TREEX
00770 POPJ PDP,
00780
00790
00800 STREE: MOVE U5,MMOVA-10(X1)
00810 MOVE U4,MMOVP-10(X1)
00820 MOVE U2,PLY-1(X2)
00830 MOVE U3,MSKIP-10(X1)
00840 MOVEI U1,[ASCIZ / /]
00850 TRNE U2,1
00860 MOVEI U1,[ASCIZ /,/]
00870 MOVEM U1,DOTFLG
00880 JRST TREE1
00890
00900 FLTREE: SETOM PRFLG
00910 MOVEI U1,[ASCIZ /,/]
00920 MOVEM U1,DOTFLG
00930 MOVEI U1,[ASCIZ / FLIT TO TRUNK /]
00940 PUSHJ PDP,PRINT
00950 LSH X4,-3
00960 ADDI X4,1
00970 MOVE U1,X4
00980 PUSHJ PDP,NUMOUT
00990 MOVEI U1,3
01000 ADDM U1,TREEX
01010 MOVN Z,FLITZ
01020 SETZ X3,
01030 MOVE U1,LOSE
01040 MOVEM U1,ZZ-1(X3)
01050 MOVEM U1,ZZ-2(X3)
01060 JRST TREES
01070
01080 TRTRE: PUSHJ PDP,TERPRI
01090 MOVEI U1,[ASCIZ / GOING TO TRUNK /]
01100 PUSHJ PDP,PRINT
01110 MOVE U1,X1
01120 PUSHJ PDP,NUMOUT
01130 PUSHJ PDP,TERPRI
01140 MOVEI U1,40
01150 MOVEM U1,TREEX
01160 POPJ PDP,
01170
01180 RETREE: MOVEI U1,[ASCIZ / REPLACE TRUNK /]
01190 PUSHJ PDP,PRINT
01200 MOVE U1,X4
01210 PUSHJ PDP,NUMOUT
01220 MOVEI U1,3
01230 ADDM U1,TREEX
01240 MOVN Z,FLITZ
01250 SETZ X3,
01260 MOVE U1,LOSE
01270 MOVEM U1,ZZ-1(X3)
01280 MOVEM U1,ZZ-2(X3)
01290 JRST TREES
01300
01310 TREES: MOVEM K,ACSAV+16
01320 MOVEI K,ACSAV
01330 BLT K,ACSAV+15
01340 MOVE U2,PLY(X2) ;COMPUTE LAST PLAY
01350 SKIPE TIPPLY ;X2 MAY BE FALSE IN TIP
01360 MOVE U2,TIPPLY
01370 ADD U2,X3
01380 ANDI U2,1
01390 MOVEM U2,LASTP
01400 MOVE U2,TREEX ;PRINT SCORES
01410 CAILE U2,20
01420 JRST TREES2
01430 CAIL U2,20
01440 JRST .+4
01450 MOVEI U1,[ASCIZ / /]
01460 PUSHJ PDP,PRINT
01470 AOJA U2,.-4
01480 MOVE U1,ZZ-1(X3)
01490 MOVE U2,ZZ-2(X3)
01500 SKIPE LASTP
01510 EXCH U1,U2 ;REPORT ALWAYS FOR PDP-6
01520 CAME U1,LOSE
01530 JRST .+4
01540 MOVEI U1,[ASCIZ / /]
01550 PUSHJ PDP,PRINT
01560 SKIPA
01570 PUSHJ PDP,SOUT
01580 MOVN U1,Z
01590 SKIPE LASTP
01600 MOVNS U1
01610 PUSHJ PDP,SOUT
01620 MOVN U1,U2
01630 CAME U1,WIN
01640 PUSHJ PDP,SOUT
01650 TREES2: PUSHJ PDP,TERPRI
01660 SETZM BUFFF2
01670 MOVEI U1,40
01680 MOVEM U1,TREEX
01690 MOVSI K,ACSAV
01700 BLT K,K
01710 POPJ PDP,
01720
01730 SOUT: MOVEM Z,ZSAV#
01740 CAMLE U1,BAD
01750 JRST .+10
01760 SUB U1,LOSE
01770 ADDI U1,1
01780 PUSHJ PDP,SOUT2
01790 MOVEI U1,[ASCIZ /LOSS/]
01800 PUSHJ PDP,PRINT
01810 MOVE Z,ZSAV
01820 POPJ PDP,
01830 CAMGE U1,GOOD
01840 JRST .+11
01850 MOVNS U1
01860 ADD U1,WIN
01870 ADDI U1,1
01880 PUSHJ PDP,SOUT2
01890 MOVEI U1,[ASCIZ / WIN/]
01900 PUSHJ PDP,PRINT
01910 MOVE Z,ZSAV
01920 POPJ PDP,
01930 ASH U1,-5
01940 ADDI U1,200
01950 MOVEM U1,U1S
01960 ASH U1,-10
01970 PUSHJ PDP,SOUT2
01980 MOVE U1,U1S
01990 ANDI U1,377
02000 SUBI U1,200
02010 PUSHJ PDP,SOUT2
02020 MOVE Z,ZSAV
02030 POPJ PDP,
02040
02050 SOUT2: SETZ X2,
02060 MOVM Z,U1
02070 SKIPGE U1
02080 SOS X2
02090 JRST RJ2
02100
02110 TREEX: 20 ;SET LARGE AT START
02120 TREE: 0 ;PRINT TREES
02130 UPNUMS: BLOCK 20
02140
02150 UPNUM: SOS U2
02160 MOVEM K,UPNUMS+16
02170 MOVEI K,UPNUMS
02180 BLT K,UPNUMS+15
02190 SETZM P
02200 SKIPE DIFF
02210 JRST UPNUM0
02220 SKIPE TOTAL
02230 JRST UPNUM1
02240 MOVE A,COUNT ;GET NUMBER OF UPDATED BOARDS
02250 CAIGE A,100000
02260 AOS P
02270 CAIGE A,10000
02280 AOS P
02290 CAIGE A,1000
02300 AOS P
02310 CAIGE A,100
02320 AOS P
02330 CAIGE A,10
02340 AOS P
02350 JUMPE P,.+4
02360 MOVEI U1,[ASCIZ / /]
02370 PUSHJ PDP,PRINT
02380 SOJG P,.-2
02390 MOVE U1,A
02400 RAD: PUSHJ PDP,OCT2
02410 MOVSI K,UPNUMS
02420 BLT K,K
02430 POPJ PDP,
02440 UPNUM0: SETZM A
02450 CALL A,[SIXBIT /RUNTIME/]
02460 MOVE U1,DIFFT
02470 MOVEM A,DIFFT
02480 SUB A,U1
02490 JRST .+4
02500 UPNUM1: SETZM A
02510 CALL A,[SIXBIT /RUNTIME/]
02520 SUB A,TIME
02530 CAIGE A,↑D100000
02540 AOS P
02550 CAIGE A,↑D10000
02560 AOS P
02570 CAIGE A,↑D1000
02580 AOS P
02590 CAIGE A,↑D100
02600 AOS P
02610 CAIGE A,↑D10
02620 AOS P
02630 JUMPE P,.+4
02640 MOVEI U1,[ASCIZ / /]
02650 PUSHJ PDP,PRINT
02660 SOJG P,.-2
02670 MOVE U1,A
02680 PUSHJ PDP,NUMOUT
02690 JRST RAD+1
02700
02710 CTELLC: SETCMM TELLC
02720 POPJ PDP,
02730
02740 DEBUG: SETCMM TELLC
02750 PUSHJ PDP,LPTREE
02760 POPJ PDP,
02770
02780 TELLC: Z
02790
02800 MTRE: MOVE U3,BRUSH(X2)
02810 LSH U3,1
02820 CAML U3,DEPTHM
02830 AOSA PRFLG#
02840 SETOM PRFLG
02850 MOVE U5,MVAA(X4)
02860 MOVE U4,MVPP(X4)
02870 MOVE U2,PLY-1(X2)
02880 MOVE U3,MMSKIP(X4)
02890 MOVEI U1,[ASCIZ / /]
02900 TRNE U2,1
02910 MOVEI U1,[ASCIZ /,/]
02920 MOVEM U1,DOTFLG
02930 TREE1: XOR U5,U4
02940 AND U4,U5
02950 XOR U5,U4 ;YES, HE REALLY MEANS IT!
02960 CAML U2,TREEX
02970 JRST TREE2
02980 SKIPN BUFFF2
02990 JRST .+4
03000 MOVEI U1,[ASCIZ / # /]
03010 PUSHJ PDP,PRINT
03020 PUSHJ PDP,TERPRI
03030 SETOM BUFFF2
03040 MOVEM U2,TREEX
03050 JUMPLE U2,.+7
03060 SKIPE TELLC
03070 PUSHJ PDP,UPNUM
03080 JUMPLE U2,.+4
03090 MOVEI U1,[ASCIZ / /]
03100 PUSHJ PDP,PRINT
03110 SOJG U2,.-2
03120 TREE2: MOVE U1,DOTFLG
03130 SKIPN PRFLG
03140 MOVEI U1,[ASCIZ /!/]
03150 PUSHJ PDP,PRINT
03160 ADDM U3,TREEX
03170 PUSHJ PDP,FIND
03180 MOVE U5,U1
03190 CAIL U1,12
03200 JRST .+3
03210 MOVEI U1,[ASCIZ / /]
03220 PUSHJ PDP,PRINT
03230 MOVE U1,U5
03240 PUSHJ PDP,NUMOUT
03250 MOVEI U1,[ASCIZ /-/]
03260 PUSHJ PDP,PRINT
03270 MOVE U5,U4
03280 PUSHJ PDP,FIND
03290 MOVE U5,U1
03300 PUSHJ PDP,NUMOUT
03310 CAIL U5,12
03320 JRST .+3
03330 MOVEI U1,[ASCIZ / /]
03340 PUSHJ PDP,PRINT
03350 SUBI U3,1 ;ALLOW FOR REPORTABLE BOARD
03360 JUMPLE U3,.+4 ;NO J'S NEEDED
03370 MOVEI U1,[ASCIZ / J /]
03380 PUSHJ PDP,PRINT
03390 SOJG U3,.-2
03400 POPJ PDP,
03410
03420 CORR: JRST NOTICE
03430
03440 TREEMP: SKIPE BUFFF ;EXPANDED TIPS
03450 JRST TREES ;YES
03452 SKIPE BUFFFF
03454 JRST .+3
03456 SETOM BUFFFF
03458 JRST .+6
03460 MOVN U1,Z
03470 CAMG U1,ZZ-1(X3)
03480 POPJ PDP, ;OMIT THIS LINE
03490 CAMG Z,ZZ-2(X3)
03500 POPJ PDP, ;OMIT THIS LINE
03510 SETZM BUFFF3 ;BUFF IS TO BE PRINTED
03520 SKIPE BUFFF2
03530 JRST .+11
03540 MOVE U2,TREEX ;LINE HAS JUST BEEN EMPTIED
03550 JUMPLE U2,.+7
03560 SKIPE TELLC
03570 PUSHJ PDP,UPNUM
03580 JUMPLE U2,.+4
03590 MOVEI U1,[ASCIZ / /]
03600 PUSHJ PDP,PRINT
03610 SOJG U2,.-2
03620 SETZ U3,
03630 TREMP1: MOVE U1,BUFF(U3)
03640 JUMPE U1,TREES ;BUFF IS EMPTY
03650 HRRZ U1,BUFF(U3)
03660 PUSHJ PDP,PRINT
03670 HLRZ U5,BUFF(U3)
03680 JUMPE U5,TREMP3
03690 LSH U5,-6
03700 CAIL U5,12
03710 JRST .+3
03720 MOVEI U1,[ASCIZ / /]
03730 PUSHJ PDP,PRINT
03740 MOVE U1,U5
03750 PUSHJ PDP,NUMOUT
03760 MOVEI U1,[ASCIZ /-/]
03770 PUSHJ PDP,PRINT
03780 HLRZ U5,BUFF(U3)
03790 SETZM BUFF(U3)
03800 ANDI U5,77
03810 MOVE U1,U5
03820 PUSHJ PDP,NUMOUT
03830 CAIL U5,12
03840 JRST .+3
03850 MOVEI U1,[ASCIZ / /]
03860 PUSHJ PDP,PRINT
03870 TREMP3: AOS TREEX
03880 AOJA U3,TREMP1
03890
03900 TRESTR: SKIPE BUFFF ;EXPAND TIPS
03910 JRST TREE1 ;YES
03920 MOVEM X1,X1S
03930 XOR U5,U4
03940 AND U4,U5
03950 XOR U5,U4
03960 SKIPE BUFFF3 ;WAS BUFF PRINTED
03970 JRST TREST2
03980 MOVEI X1,17 ;YES SO EMPTY
03990 SETZM BUFF(X1)
04000 SOJGE X1,.-1
04010 SETZB X1,BUFFX
04020 MOVEM U2,TREEX
04030 JRST TREST3
04040 TREST2: MOVE X1,BUFFX
04050 MOVE U1,X1
04060 ADD U1,TREEX
04070 CAML U2,U1
04080 JRST .+5
04090 SETZM BUFF(X1)
04100 SKIPE X1
04110 SOJGE X1,.-6
04120 MOVEM U2,TREEX
04130 TREST3: MOVE U1,DOTFLG
04140 MOVEM U1,BUFF(X1)
04150 PUSHJ PDP,FIND
04160 LSH U1,30
04170 IORM U1,BUFF(X1)
04180 MOVE U5,U4
04190 PUSHJ PDP,FIND
04200 LSH U1,22
04210 IORM U1,BUFF(X1)
04220 ADDI X1,1
04230 SUBI U3,1
04240 JUMPLE U3,.+5
04250 MOVEI U1,[ASCIZ / J /]
04260 MOVEM U1,BUFF(X1)
04270 ADDI X1,1
04280 SOJG U3,.-2
04290 MOVEM X1,BUFFX
04300 MOVE X1,X1S
04310 SETOM BUFFF3 ;NEW DATA IN BUFF
04320 POPJ PDP,
04330
04340 BUFFX: Z ;BUFFER INDEX
04350 BUFFF: Z ;NON-ZERO TO EXPAND TIPS
04360 BUFFF2: Z ;LINE TERPRI FLAG
04370 BUFFF3: Z ;ANOTHER LINE TER FLAG
04380 BUFF: BLOCK 20 ;TREE BUFFER
00010 SUBTTL CHECKERS I/O -- B. PITTS
00020 PAGE
00030 LIST
00040
00050 ;**************************************************************
00060 ; THESE I/O ROUTINES USE REGISTERS U1, U2, U3, U4, U5, X4, }
00070 ;AND PDP. REGISTERS X1, X2, X3, AND X5 ARE USED BY OTHER }
00080 ;ROUTINES (SAUTER'S) WHICH ARE CALLED BY THESE ROUTINES. }
00090 ;**************************************************************
00100
00110
00120 ;MOVIN IS CALLED BY THE INTERPRETER WHEN A NUMBER IS
00130 ;ENCOUNTERED AS THE FIRST ELEMENT OF A COMMAND.
00140
00150 MOVIN: PUSHJ PDP,SETLEG ;FIX ORF, ETC. FOR NEXT MOVE
00160 MOVE U2,[POINT 4,MJ]
00170 MOVEM U2,MJBP ;INIT BYTE POINTER
00180 MOVE U2,[POINT 6,MJBP,5]
00190 MOVEM U2,BPBP ;INIT BYTE POINTER'S BYTE POINTER
00200 MOVEI I,300
00210 HRLZI U3,400000
00220 HRRZS U1
00230 PUSHJ PDP,OUTIN ;FIX THE NUMBER
00240 MOVN U4,U1
00250 LSH U3,(U4) ;MOVE BIT NOW IN PROPER POSITION
00260 PUSHJ PDP,SCAN ;GET SEPARATER
00270 TLNE U1,-1 ;NUMBER OR IDENTIFIER?
00280 JRST .+3 ;NUMBER, SPACE OR "," MUST HAVE BEEN DELIMITER
00290 PUSHJ PDP,EOL ;GET THE NEXT NUMBER
00300 JRST ERR
00310 PUSHJ PDP,OUTIN ;FIX THE NUMBER
00320 MOVE U2,U1
00330 ADD U4,U2
00340 MOVM U1,U4
00350 CAIGE U1,6 ;IS HE TRYING TO MAKE A JUMP?
00360 JRST MOVIN0 ;NO
00370 SKIPE OJ ;DID LEGALS FIND JUMP MOVES?
00380 JRST .+3 ;YES
00390 MOVEI U1,[ASCIZ /JUMP?/]
00400 JRST IMP+1
00410 ASH U4,-1
00420 JRST MOVIN1
00430 MOVIN0: SKIPN OJ ;IS IT A JUMP MOVE?
00440 JRST MOVIN1 ;NO
00450 MOVEI U1,[ASCIZ /JUMP!/]
00460 JRST IMP+1
00470 MOVIN1: SETZB X4,X3
00480 JUMPL U4,MOVIN3
00490 CAIE U4,4
00500 JRST MOVIN2
00510 MOVE U1,ORF
00520 TDNN U1,U3 ;IS IT A LEGAL MOVE?
00530 JRST IMP ;NO
00540 JRST MORE
00550 MOVIN2: CAIE U4,5
00560 JRST IMP
00570 MOVE U1,OLF
00580 TDNN U1,U3 ;IS IT A LEGAL MOVE?
00590 JRST IMP ;NO
00600 JRST MORE
00610 MOVIN3: TLZ U4,777777
00620 CAIE U4,-4
00630 JRST MOVIN4
00640 TLO U4,777777
00650 MOVE U1,OLB
00660 TDNN U1,U3 ;IS IT A LEGAL MOVE?
00670 JRST IMP ;NO
00680 JRST MORE
00690 MOVIN4: CAIE U4,-5
00700 JRST IMP
00710 TLO U4,777777
00720 MOVE U1,ORB
00730 TDNN U1,U3 ;IS IT A LEGAL MOVE?
00740 JRST IMP ;NO
00750 MORE: PUSHJ PDP,SCAN
00760 SKIPN ACCFLG
00770 JRST .+5
00780 MOVEI U2,MOVIT-1
00790 CAIN U1,15
00800 MOVEM U2,(PDP)
00810 CAIE U1,","
00820 TLZN U1,400000
00830 JRST MKMOV
00840 PUSHJ PDP,OUTIN ;FIX THE NUMBER
00850 MOVN U5,U2
00860 ADD U5,U1
00870 ASH U5,-1
00880 ROT X4,(X3)
00890 JUMPL U5,MOVIN6
00900 CAIE U5,4 ;RFMJ?
00910 JRST MOVIN5 ;NO, BUT MAYBE LFMJ
00920 TLO X4,40000 ;SET RF BIT
00930 JRST MOVIN8
00940 MOVIN5: CAIE U5,5 ;LFMJ?
00950 JRST IMP ;ILLEGAL MOVE
00960 TLO X4,100000 ;SET LF BIT
00970 JRST MOVIN8
00980 MOVIN6: TLZ U5,777777 ;SO THAT THE NEXT INSTR. WILL WORK
00990 CAIE U5,-4 ;LBMJ?
01000 JRST MOVIN7 ;NO, BUT MAYBE RBMJ
01010 TLO U5,777777 ;UNDOES THAT WHICH HAS BEEN DONE
01020 TLO X4,200000 ;SET LB BIT
01030 JRST MOVIN8
01040 MOVIN7: CAIE U5,-5 ;RBMJ?
01050 JRST IMP ;ILLEGAL MOVE
01060 TLO U5,777777
01070 TLO X4,400000 ;SET RB BIT
01080 MOVIN8: MOVNS X3
01090 ROT X4,(X3)
01100 MOVMS X3
01110 ADDI X3,4
01120 MOVE U2,U1
01130 JRST MORE
01140 MKMOV: AOS FSTCR
01150 MOVEM X4,MJW
01160 MOVE U1,U3
01170 MOVE A,OA ;LOAD BOARD INTO A, P, AND K
01180 MOVE P,OP
01190 MOVE K,OK
01200 AOS SI
01210 MOVN U2,U4
01220 MOVE X5,MJW
01230 MOVEI X3,1
01240 PUSHJ PDP,UPDATE+2 ;UPDATE
01250 MOVEM A,IA ;STORE BOARD
01260 MOVEM P,IP
01270 MOVEM K,IK
01280 MOVEM A,OA
01290 MOVEM P,OP
01300 MOVEM K,OK
01310 SKIPE ACCFLG#
01320 POPJ PDP,
01330 MKPLAY: PUSHJ PDP,SAVBD ;SAVE BOARD POSITION
01340 SETCMM LPFLAG
01350 SETZM Z
01360 CALL Z,[SIXBIT /RUNTIME/]
01370 MOVEM Z,TIME
01380 MOVE A,OA ;ADDED FEB 25 70
01390 MOVE P,OP
01400 MOVE K,OK
01410 PUSHJ PDP,PLAY ;NOW GO PLAY CHECKERS
01420
01430
01440 ;MOVOUT IS CALLED BY THE CHECKER PROGRAM AFTER IT HAS FINALLY
01450 ;DECIDED WHAT TO DO.
01460
01470 MOVOUT: SETZM Z
01480 CALL Z,[SIXBIT /RUNTIME/]
01490 SUB Z,TIME
01500 MOVEM Z,TIME
01510 MOVE A,OA
01520 MOVE P,OP
01530 MOVE K,OK
01540 MOVE U2,U1
01550 MOVE U3,U1
01560 SKIPE HEADFL
01570 PUSHJ PDP,HEAD
01580 MOVE U1,SI ;GET MOVE INDEX
01590 PUSHJ PDP,NUMOUT ;WRITE MOVE INDEX
01600 MOVEI U1,[ASCIZ / /]
01610 PUSHJ PDP,PRINT ;WRITE TAB
01620 HLRZ U1,U3 ;GET STARTING POSITION
01630 PUSHJ PDP,NUMOUT
01640 MOVEI U1,[ASCIZ /-/]
01650 PUSHJ PDP,PRINT ;PRINT HYPHEN
01660 HRRZ U1,U3 ;GET DESTINATION POSITION
01670 PUSHJ PDP,NUMOUT
01680 MOVEI U1,[ASCIZ / /]
01690 PUSHJ PDP,PRINT
01700 MOVE U1,COUNT
01705 PUSHJ PDP,RJOUT
01710 MOVEI U1,[ASCIZ /./]
01715 PUSHJ PDP,PRINT
01720 SKIPE SFLAG
01725 PUSHJ PDP,TELLS
01730 SKIPE DWFLAG
01735 PUSHJ PDP,TELLDW
01740 SKIPE RUNT
01745 PUSHJ PDP,RUNT+1
01750 SKIPE USEBOK
01755 JRST MOVOUZ
01760 MOVE U1,U2MAX
01765 PUSHJ PDP,RJOUT
01770 MOVE U1,TIMEX
01775 LSH U1,11
01780 PUSHJ PDP,RJOUT
01785 PUSHJ PDP,TERPRI
01790 MOVEI X3,1
01792 MOVEI U1,[ASCIZ / /]
01793 PUSHJ PDP,PRINT
01795 MOVOUX: MOVE U2,MOVXZ(X3)
01800 JUMPL U2,MOVOUY
01815 MOVEI U1,[ASCIZ / /]
01820 PUSHJ PDP,PRINT
01825 HLRZ U1,MOVES(U2)
01830 CAIL U1,12
01835 JRST .+4
01840 MOVEI U1,[ASCIZ / /]
01845 PUSHJ PDP,PRINT
01850 HLRZ U1,MOVES(U2)
01851 PUSHJ PDP,NUMOUT
01852 MOVEI U1,[ASCIZ /-/]
01853 PUSHJ PDP,PRINT
01860 HRRZ U1,MOVES(U2)
01865 CAIL U1,12
01867 JRST .+4
01870 MOVEI U1,[ASCIZ / /]
01875 PUSHJ PDP,PRINT
01881 HRRZ U1,MOVES(U2)
01882 PUSHJ PDP,NUMOUT
01883 AOJA X3,MOVOUX
01884 MOVOUY: PUSHJ PDP,TERPRI
01889 SETZ X3,
01890 JRST .+2
01900 PUSHJ PDP,RJOUT
01910 SKIPE U1,DEPTHZ(X3)
01920 AOJA X3,.-2
01930 PUSHJ PDP,TERPRI
01940 SETZ X3,
01950 JRST .+3
01960 SUB U1,COUNTZ-2(X3)
01970 PUSHJ PDP,RJOUT
01980 SKIPE U1,COUNTZ(X3)
01990 AOJA X3,.-3
02000 MOVOUZ: SKIPG LPFLAG
02010 JRST .+6
02020 MOVEI X1,14
02030 PUSHJ PDP,TYO
02040 SETCMM LPFLAG
02050 MOVE U1,U2
02060 JRST MOVOUT+10
02070 SETZM COUNT
02080 AOS SI
02090 PUSHJ PDP,SAVBD
02100 JRST TERPRI
02110
02120 SUM: SETZB X4,SI
02130 SETZM HEADFL
02140 PUSHJ PDP,TERPRI
02150 AOS U4,SI
02160 SKIPN U5,SP+1(U4)
02170 JRST SUM1
02180 MOVE P,U5
02190 XOR U5,SA(U4)
02200 PUSHJ PDP,FINDM+2
02210 PUSHJ PDP,MOVOUT+2
02220 JRST SUM+3
02230 SUM1: MOVE U1,U4
02240 JRST GO+5
02250
02260
02270 HEAD: PUSHJ PDP,TERPRI
02280 PUSHJ PDP,TERPRI
02290 PUSHJ PDP,TERPRI
02300 SKIPLE LPFLAG
02310 POPJ PDP,
02320 SETZM HEADFL
02330 MOVEI U1,[ASCIZ / MOVE # OF BDS/]
02340 PUSHJ PDP,PRINT
02350 MOVEI U1,[ASCIZ / PIECE EVAL/]
02360 SKIPE SFLAG
02370 PUSHJ PDP,PRINT
02380 MOVEI U1,[ASCIZ / TIME/]
02390 SKIPE RUNT
02400 PUSHJ PDP,PRINT
02410 PUSHJ PDP,TERPRI
02420 PUSHJ PDP,TERPRI
02430 POPJ PDP,
02440
02450 SAVBD: MOVE X5,SI
02460 CAIL X5,100 ;LIMIT OF TABLE SIZE
02470 POPJ PDP,
02480 MOVEM A,SA(X5)
02490 MOVEM P,SP(X5)
02500 MOVEM K,SK(X5)
02510 RECOUT: INIT 12,17
02520 SIXBIT /DSK/
02530 Z
02540 HALT
02550 SETZM GAMESV+3
02560 ENTER 12,GAMESV
02570 HALT
02580 OUTPUT 12,RECORD
02590 RELEAS 12,
02600 POPJ PDP,
02610
02620 RECIN: INIT 12,17
02630 SIXBIT /DSK/
02640 Z
02650 SETZM GAMESV+3
02660 LOOKUP 12,GAMESV
02670 JRST .+4
02680 INPUT 12,RECORD
02690 RELEAS 12,
02700 POPJ PDP,
02710 MOVEI U1,[ASCIZ /GAME FILE NOT FOUND./]
02720 PUSHJ PDP,PRINT
02730 JRST TERPRI
02740
02750 RECORD: IOWD 100,SA
02760 Z
02770
02780 GAMESV: SIXBIT /GAME/
02790 SIXBIT /CHK/
02800 0
02810 SIXBIT / 2ALS/
02820
02830
02840 IMP: MOVEI U1,[ASCIZ /IMP!/]
02850 PUSHJ PDP,PRINT
02860 PUSHJ PDP,TERPRI
02870 PUSHJ PDP,TERPRI
02880 POPJ PDP,
02890
02900 PAGE
02910
02920 ;****************************************************************
02930 ;ACCEPT WILL ACCEPT A STARTING BOARD POSITION FROM THE TTY. *
02940 ;NO ERROR CHECKING IS DONE AGAINST STARTING WITH A BOARD WITH *
02950 ;MORE THAN 12 BLACK OR WHITE PIECES. THUS, AN OPPONENT CAN *
02960 ;GIVE THE MACHINE A HANDICAP BY GIVING HIMSELF 13 OR 14 PIECES. *
02970 ; *
02980 ;REGISTERS U1, U3, U4, U5, X1, X2, AND X3 ARE DESTROYED BY *
02990 ;ACCEPT. *
03000 ;****************************************************************
03010
03020 ACCEPT: SETZM FSTCR
03030 PUSHJ PDP,TERPRI
03040 PUSHJ PDP,TERPRI
03050 SETZM U5
03060 PUSHJ PDP,EOL ;GOBBLE UP CR IN BUFFER
03070 SKIPA
03080 JRST ACCMOV
03090 MOVEI U1,[ASCIZ /BLACK PIECES ON: /]
03100 PUSHJ PDP,PRINT
03110 PUSHJ PDP,ACC ;READ IN BLACK PIECES
03120 MOVEM U3,OA ;STORE BLACK PIECES
03130 MOVEI U1,[ASCIZ /WHITE PIECES ON: /]
03140 PUSHJ PDP,PRINT
03150 PUSHJ PDP,ACC ;NOW READ IN WHITE PIECES
03160 MOVEI U1,[ASCIZ /BLACK TO PLAY? /]
03170 PUSHJ PDP,PRINT
03180 MOVEI U1,1
03190 MOVEM U1,SI
03200 PUSHJ PDP,NOYES
03210 AOSA SI
03220 JRST .+3 ;BLACK IS TO PLAY
03230 EXCH U3,OA
03240 SETZM SIDE
03250 MOVEM U3,OP ;STORE WHITE PIECES
03260 MOVEM U5,OK
03270 MOVE A,OA
03280 MOVE P,OP
03290 MOVE K,OK
03300 PUSHJ PDP,SAVBD
03310 PUSHJ PDP,TERPRI
03320 PUSHJ PDP,TERPRI
03330 POPJ PDP,
03340 ACC: SETZM U3
03350 ACC1: HRLZI U4,400000
03360 ACC2: PUSHJ PDP,SCAN
03370 CAIN U1,15 ;CR?
03380 POPJ PDP, ;YES
03390 TLZE U1,400000 ;NUMBER?
03400 JRST ACC3 ;YES
03410 HRRZS U1 ;GET RID OF LEFT HALF FLAG BITS
03420 CAIN U1,K ;IF A KING ...
03430 TDO U5,U4 ; ... SET KING BIT
03440 JRST ACC1
03450 ACC3: PUSHJ PDP,OUTIN ;CONVERT TO INTERNAL NUMBERS
03460 MOVNS U1
03470 ROT U4,(U1) ;ROTATE TO BIT'S POSITION
03480 TDO U3,U4 ;SET PIECE'S BIT
03490 JRST ACC2
03500
03510 ACCMOV: SETOM ACCFLG
03520 PUSHJ PDP,MOVIN
03530 PUSHJ PDP,MOVIT
03540 PUSHJ PDP,EOL
03550 AOSA ACCFLG
03560 JRST .-4
03570 POPJ PDP,
03580
03590 SETZM ACCFLG
03600 MOVIT: MOVEI U1,1
03610 XORM U1,SIDE
03620 MOVEM A,OA
03630 MOVEM P,OP
03640 MOVEM K,OK
03650 POPJ PDP,
03660
03670
03680 PAGE
03690
03700 ;********************************************
03710 ;GO WILL INITIATE PLAY AT THE BOARD SPECIFIED
03720 ;********************************************
03730
03740 GO: PUSHJ PDP,TERPRI
03750 PUSHJ PDP,EOL
03760 SOS U1,SI
03770 CAIGE U1,1 ;NUMBER IN PERMISSABLE RANGE?
03780 JRST ERRGO ;NO
03790 MOVEM U1,SI ;STORE NEW INDEX
03800 MOVE A,SA(U1) ;GET BOARD
03810 MOVE P,SP(U1)
03820 MOVE K,SK(U1)
03830 MOVEM A,OA
03840 MOVEM P,OP
03850 MOVEM K,OK
03860 SETZM SIDE
03870 TRNN U1,1
03880 AOS SIDE
03890 POPJ PDP,
03900
03910 ERRGO: MOVEI U1,[ASCIZ /BOARD OUT OF RANGE./]
03920 PUSHJ PDP,PRINT
03930 PUSHJ PDP,TERPRI
03940 POPJ PDP,
03950
03960 PB: MOVE U1,SI
03970 TRNN U1,1
03980 POPJ PDP,
03990 SETZM SIDE
04000 PUSHJ PDP,TERPRI
04010 PUSHJ PDP,PDP16
04020 MOVEI U1,[ASCIZ / IS NOW PLAYING BLACK./]
04030 PUSHJ PDP,PRINT
04040 PUSHJ PDP,TERPRI
04050 AOS FSTCR
04060 JRST MKPLAY
04070
04080 PW: MOVE U1,SI
04090 TRNE U1,1
04100 POPJ PDP,
04110 SKIPN SIDE
04120 AOS SIDE
04130 PUSHJ PDP,TERPRI
04140 PUSHJ PDP,PDP16
04150 MOVEI U1,[ASCIZ / IS NOW PLAYING WHITE./]
04160 JRST PB+7
04170
04180
04190 SETB: MOVEI U1,[ASCIZ /BLACK = /]
04200 PUSHJ PDP,PRINT
04210 PUSHJ PDP,OCTIN
04220 MOVEM U1,BTERMS
04230 PUSHJ PDP,TERPRI
04240 POPJ PDP,
04250
04260 SETW: MOVEI U1,[ASCIZ /WHITE = /]
04270 PUSHJ PDP,PRINT
04280 PUSHJ PDP,OCTIN
04290 MOVEM U1,WTERMS
04300 PUSHJ PDP,TERPRI
04310 POPJ PDP,
04320
04330 BTERMS: 777777
04340 WTERMS: 777777
04350
04360 PC: SETZM CFLAG
04370 SETZM BTERMS
04380 SETZM WTERMS
04390 POPJ PDP,
04400
04410 SIG: MOVEI U2,777777
04420 MOVEM U2,BTERMS
04430 MOVEM U2,WTERMS
04440 MOVEM U2,CFLAG
04450 POPJ PDP,
04460
04470
04480 PORT: MOVEI X1,15
04490 CAMN X1,LASCAR ;LASCAR A <CR>?
04500 POPJ PDP, ;YES, SO RETURN FOR SET BOTH
04510 PUSHJ PDP,TYI ;NO, SO GET NEXT CHAR. FROM TTY
04520 CAIN U1," " ;A SPACE?
04530 JRST PORT ;YES, SO TRY AGAIN
04540 AOS (PDP)
04550 AOS (PDP) ;SET RETURN ADDRESS FOR TIP ONLY
04560 CAIN U1,"T" ;"T" FOR "TIP"?
04570 POPJ PDP, ;YES, SO RETURN
04580 AOS (PDP)
04590 AOS (PDP)
04600 CAIN U1,"P" ;"P" FOR "PLAUS"?
04610 POPJ PDP,
04620 AOS (PDP)
04630 AOS (PDP)
04640 POPJ PDP, ;FLITEV RETURN
04650
04660 PDP16: MOVEI U1,[ASCIZ /THE PDP-/]
04670 PUSHJ PDP,PRINT
04680 PUSHJ PDP,MTYPE
04690 PUSHJ PDP,NUMOUT
04700 POPJ PDP,
04710
04720
04730 PAGE
04740
04750 ;************************************************************
04760 ;BDOUT WILL PRINT OUT THE CURRENT BOARD IN PICTURE FORMAT. *
04770 ;BDOUT USES REGISTERS A, P, K, U1, U2, U4, U5, X3, AND X4. *
04780 ;REGISTERS A, P, AND K ARE NOT DESTROYED BY BDOUT *
04790 ;************************************************************
04800
04810 BDOUT: MOVE A,OA
04820 MOVE P,OP
04830 MOVE K,OK
04840 PUSHJ PDP,TERPRI
04850 SETZB X4,U2
04860 SETZM X3
04870 MOVE U4,A
04880 MOVE U5,P
04890 AND U4,K ;ACTIVE KINGS
04900 AND U5,K ;PASSIVE KINGS
04910 PUSHJ PDP,BORDER
04920 PUSHJ PDP,TERPRI
04930 PUSHJ PDP,PSTAR
04940 AGAIN: PUSHJ PDP,PPLUS ;PRINT + SIGN
04950 TRNN U2,7
04960 JRST CRLFCK
04970 AGAIN1: ROT A,-1
04980 ROT U4,-1
04990 ROT P,-1
05000 ROT U5,-1
05010 TLNN U4,400000 ;BK?
05020 JRST .+3
05030 PUSHJ PDP,PBK
05040 JRST BDOUT1
05050 TLNN A,400000 ;BM?
05060 JRST .+3 ;NO
05070 PUSHJ PDP,PBM
05080 JRST BDOUT1
05090 TLNN U5,400000 ;WK?
05100 JRST .+3 ;NO
05110 PUSHJ PDP,PWK
05120 JRST BDOUT1
05130 TLNN P,400000 ;WM?
05140 JRST .+3 ;NO
05150 PUSHJ PDP,PWM
05160 JRST BDOUT1
05170 PUSHJ PDP,PHYFEN ;EMPTY SQUARE
05180 BDOUT1: AOS X4
05190 CAIN X4,↑D8 ;SHIFT OVER BITS 9, 18, 27
05200 JRST BDOUT2
05210 CAIN X4,↑D17
05220 JRST BDOUT2
05230 CAIE X4,↑D26
05240 JRST CRLFCK
05250 BDOUT2: ROT A,-1
05260 ROT U4,-1
05270 ROT P,-1
05280 ROT U5,-1
05290 AOS X4
05300 CRLFCK: TRNE U2,7 ;DO WE WANT A CR-LF?
05310 JRST AGAIN ;NO
05320 PUSHJ PDP,PSTAR
05330 PUSHJ PDP,TERPRI
05340 SETCMM X3
05350 JUMPGE X3,.+3
05360 PUSHJ PDP,PSTAR
05370 JRST AGAIN1
05380 CAIE U2,↑D64
05390 JRST AGAIN-1
05400 PUSHJ PDP,BORDER
05410 PUSHJ PDP,TERPRI
05420 PUSHJ PDP,TERPRI
05430 ROT A,-1
05440 ROT P,-1
05450 POPJ PDP,
05460
05470 PPLUS: MOVEI U1,[ASCIZ /+ /]
05480 PUSHJ PDP,PRINT
05490 AOS U2
05500 POPJ PDP,
05510
05520 BORDER: MOVEI U1,[ASCIZ /* * * * * * * * * */]
05530 PUSHJ PDP,PRINT
05540 POPJ PDP,
05550
05560 PSTAR: MOVEI U1,[ASCIZ /* /]
05570 PUSHJ PDP,PRINT
05580 POPJ PDP,
05590
05600 PHYFEN: MOVEI U1,[ASCIZ / /]
05610 PUSHJ PDP,PRINT
05620 AOS U2
05630 POPJ PDP,
05640
05650 PBM: MOVEI U1,[ASCIZ /B /]
05660 SKIPN SIDE
05670 MOVEI U1,[ASCIZ /W /]
05680 PUSHJ PDP,PRINT
05690 AOS U2
05700 POPJ PDP,
05710
05720 PBK: MOVEI U1,[ASCIZ /BK/]
05730 SKIPN SIDE
05740 MOVEI U1,[ASCIZ /WK/]
05750 PUSHJ PDP,PRINT
05760 AOS U2
05770 POPJ PDP,
05780
05790 PWM: MOVEI U1,[ASCIZ /W /]
05800 SKIPN SIDE
05810 MOVEI U1,[ASCIZ /B /]
05820 PUSHJ PDP,PRINT
05830 AOS U2
05840 POPJ PDP,
05850
05860 PWK: MOVEI U1,[ASCIZ /WK/]
05870 SKIPN SIDE
05880 MOVEI U1,[ASCIZ /BK/]
05890 PUSHJ PDP,PRINT
05900 AOS U2
05910 POPJ PDP,
05920
05930
05940 PAGE
05950
05960 ;************************************************************
05970 ;BOUT PRINTS THE CURRENT BOARD POSITION ON THE TTY. ONE *
05980 ;MUST BEWARE WHEN ONE USES BOUT, FOR IT DESTROYS REGISTERS *
05990 ;U1, U2, AND U3 ON WEEKDAYS FROM 1 TO 4 PM. *
06000 ;************************************************************
06010
06020 BOUT: MOVE U2,SI ;GET MOVE INDEX
06030 MOVE U4,OA ;GET ACTIVE PIECES
06040 BOUT0: MOVE U5,OK ;& KINGS
06050 PUSHJ PDP,TERPRI
06060 MOVEI U3,1
06070 MOVEI U1,[ASCIZ /B /]
06080 TRNN U2,1 ;BLACK TO PLAY?
06090 MOVEI U1,[ASCIZ /W /] ;NO
06100 PUSHJ PDP,PRINT
06110 LSH U4,1
06120 LSH U5,1
06130 BOUT1: TLNN U4,400000 ;A PIECE THERE?
06140 AOJA U3,.-3 ;NO
06150 PUSHJ PDP,INOUT ;YES, SO PRINT NUMBER
06160 MOVEI X1,"K"
06170 TLNE U5,400000 ;IS PIECE A KING?
06180 PUSHJ PDP,TYO ;YES, SO PRINT "K"
06190 LSH U4,1
06200 LSH U5,1 ;SHIFT TO NEXT POSITION
06210 JUMPE U4,BOUT2 ;JUMP IF NO MORE PIECES
06220 MOVEI X1,"," ;THERE ARE MORE PIECES
06230 PUSHJ PDP,TYO ;SO PRINT COMMA
06240 AOJA U3,BOUT1
06250 BOUT2: TLCE U2,-1 ;FIRST OR SECOND TIME HERE?
06260 JRST BOUT3 ;SECOND, SO EXIT
06270 TRC U2,1
06280 MOVE U4,OP
06290 JRST BOUT0
06300 BOUT3: PUSHJ PDP,TERPRI
06310 PUSHJ PDP,TERPRI
06320 POPJ PDP,
06330
06340 PAGE
06350 ;*************************************
06360 ;LEGM PRINTS ALL POSSIBLE LEGAL MOVES.
06370 ;*************************************
06380
06390 LEGM: SETZM FLAG
06400 MOVEI U3,4
06410 SKIPE U2,ORF
06420 PUSHJ PDP,LEGM1
06430 MOVEI U3,5
06440 SKIPE U2,OLF
06450 PUSHJ PDP,LEGM1
06460 MOVNI U3,4
06470 SKIPE U2,OLB
06480 PUSHJ PDP,LEGM1
06490 MOVNI U3,5
06500 SKIPE U2,ORB
06510 PUSHJ PDP,LEGM1
06520 PUSHJ PDP,TERPRI
06530 POPJ PDP,
06540 LEGM1: SETZM U4
06550 CAIL U4,↑D35
06560 POPJ PDP,
06570 ROT U2,1
06580 AOS U4
06590 TLNN U2,400000
06600 JRST LEGM1+1
06610 MOVEI U1,[ASCIZ /,/]
06620 SKIPE FLAG
06630 PUSHJ PDP,PRINT
06640 MOVE U1,U4
06650 PUSHJ PDP,INOUT+1
06660 MOVEI U1,[ASCIZ /-/]
06670 PUSHJ PDP,PRINT
06680 MOVE U1,U4
06690 ADD U1,U3
06700 SKIPE OJ
06710 ADD U1,U3
06720 PUSHJ PDP,INOUT+1
06730 AOS FLAG
06740 JRST LEGM1+1
06750
06760 PAGE
06770 ;**********************************
06780 ;SETLEG SETS UP INITIAL LEGAL MOVES
06790 ;**********************************
06800
06810 SETLEG: MOVEM U1,X1S
06820 SETZB X3,SIDE
06830 MOVE A,SI
06840 TRNE A,1
06850 AOS SIDE
06860 MOVE A,SIDE
06870 TRC A,1
06880 MOVEM A,COLOR
06890 MOVE A,OA
06900 MOVE P,OP
06910 MOVE K,OK
06920 SETZM OJ
06930 PUSHJ PDP,LEGAL
06940 JRST EOG
06950 SETOM OJ
06960 MOVE U3,PLRF
06970 MOVEM U3,ORF
06980 MOVE U4,PLLF
06990 MOVEM U4,OLF
07000 MOVE U5,PLLB
07010 MOVEM U5,OLB
07020 MOVE Q,PLRB
07030 MOVEM Q,ORB
07040 MOVE U1,X1S
07050 POPJ PDP,
07060 EOG: MOVEI U1,[ASCIZ /NO LEGAL MOVES./]
07070 JRST PRINT
07080
07090 PAGE
07100
07110 ;******************
07120 ;SET TREE FLIP-FLOP
07130 ;******************
07140
07150 LPTREE: PUSHJ PDP,LPTFIX ;SEND TREES TO LPT
07160 TRESET: MOVEI U1,1
07170 XORM U1,TREE
07180 POPJ PDP,
07190
07200 ;************************************************
07210 ;INOUT CONVERTS AN INTERNAL NUMBER TO AN EXTERNAL
07220 ;NUMBER AND PRINTS IT ON THE TTY
07230 ;************************************************
07240
07250 INOUT: MOVE U1,U3
07260 CAIL U1,↑D27
07270 SOS U1
07280 CAIL U1,↑D18
07290 SOS U1
07300 CAIL U1,↑D9
07310 SOS U1
07320 PUSHJ PDP,NUMOUT
07330 POPJ PDP,
07340
07350 ;********************************************
07360 ;PLAYBS WILL HAVE THE MACHINE PLAY BOTH SIDES
07370 ;********************************************
07380
07390 PLAYBS: PUSHJ PDP,EOL
07400 SETOM U1
07410 MOVEM U1,STOP
07420 PUSHJ PDP,SCAN
07430 MOVE U1,SI
07440 SETZM SIDE
07450 TRNN U1,1
07460 AOS SIDE
07470 AOS FSTCR
07480 MOVE A,OA
07490 MOVE P,OP
07500 MOVE K,OK
07510 PUSHJ PDP,MKPLAY ;GO PLAY CHECKERS
07520 CALLI U1,20
07530 CAIN U1,012345
07540 POPJ PDP,
07550 TTYUUO 2,U1
07560 JRST .+2
07570 JRST INTERP
07580 MOVE U1,SI
07590 CAME U1,STOP
07600 JRST PBS
07610 MOVEI U1,[034160703400] ;PRINT 4 BELLS
07620 PUSHJ PDP,PRINT
07630 POPJ PDP, ;TIME TO STOP
07640 PBS: MOVEI U1,1
07650 XORM U1,SIDE
07660 JRST PLAYBS+10 ;NOW PLAY OTHERSIDE
07670
07680 PAGE
07690
07700 D: PUSHJ PDP,SCAN ;GET NEXT CHARACTER
07710 SETOM DWFLAG
07720 CAIN U1,"+" ;IS IT A '+'?
07730 AOS DEPTH ;YES
07740 CAIN U1,"-" ;IS IT A '-'?
07750 SOS DEPTH ;YES
07760 TLZE U1,400000 ;IS IT A NUMBER?
07770 MOVEM U1,DEPTH ;YES
07780 POPJ PDP,
07790
07800 W: PUSHJ PDP,SCAN ;GET NEXT CHARACTER
07810 SETOM DWFLAG
07820 CAIN U1,"+" ;IS IT A '+'?
07830 AOS WIDTH ;YES
07840 CAIN U1,"-" ;IS IT A '-'?
07850 SOS WIDTH
07860 TLZE U1,400000 ;IS IT A NUMBER?
07870 MOVEM U1,WIDTH ;YES
07880 POPJ PDP,
07890
07900 SETPAR: PUSHJ PDP,TERPRI
07910 MOVEI U1,[ASCIZ /DEPTH = /]
07920 PUSHJ PDP,PRINT
07930 PUSHJ PDP,DECIN
07940 MOVEM U1,DEPTH
07950 MOVEI U1,[ASCIZ /TIME = /]
07960 PUSHJ PDP,PRINT
07970 PUSHJ PDP,DECIN
07980 MOVEM U1,TIMEX
07990 MOVEI U1,[ASCIZ /WIDTH = /]
08000 PUSHJ PDP,PRINT
08010 PUSHJ PDP,DECIN
08020 MOVEM U1,WIDTH
08030 MOVEI U1,[ASCIZ /TAPER = /]
08040 PUSHJ PDP,PRINT
08050 PUSHJ PDP,DECIN
08060 MOVEM U1,TAPER
08070 MOVEI U1,[ASCIZ /BLACK = /]
08080 PUSHJ PDP,PRINT
08090 PUSHJ PDP,OCTIN
08100 MOVEM U1,BTERMS
08110 MOVEI U1,[ASCIZ /WHITE = /]
08120 PUSHJ PDP,PRINT
08130 PUSHJ PDP,OCTIN
08140 MOVEM U1,WTERMS
08142 MOVEI U1,[ASCIZ /REPLY = /]
08143 PUSHJ PDP,PRINT
08144 PUSHJ PDP,DECIN
08145 MOVEM U1,REPLYD
08150 MOVEI U1,[ASCIZ /FLIT = /]
08160 PUSHJ PDP,PRINT
08170 PUSHJ PDP,DECIN
08190 MOVEM U1,PLAUSD
08200 MOVEI U1,[ASCIZ /STEM = /]
08210 PUSHJ PDP,PRINT
08220 PUSHJ PDP,DECIN
08240 MOVEM U1,STEMD
08250 MOVEI U1,[ASCIZ /PLAY = /]
08260 PUSHJ PDP,PRINT
08270 PUSHJ PDP,DECIN
08290 MOVEM U1,PLAYD
08300 PUSHJ PDP,TERPRI
08310 POPJ PDP,
08320
00010 TELPAR: PUSHJ PDP,TERPRI
00020 MOVEI U1,[ASCIZ /DEPTH = /]
00030 PUSHJ PDP,PRINT
00040 MOVE U1,DEPTH
00050 PUSHJ PDP,NUMOUT
00060 PUSHJ PDP,TERPRI
00070 MOVEI U1,[ASCIZ /TIME = /]
00080 PUSHJ PDP,PRINT
00090 MOVE U1,TIMEX
00100 PUSHJ PDP,NUMOUT
00110 PUSHJ PDP,TERPRI
00120 MOVEI U1,[ASCIZ /WIDTH = /]
00130 PUSHJ PDP,PRINT
00140 MOVE U1,WIDTH
00150 PUSHJ PDP,NUMOUT
00160 PUSHJ PDP,TERPRI
00170 MOVEI U1,[ASCIZ /TAPER = /]
00180 PUSHJ PDP,PRINT
00190 MOVE U1,TAPER
00200 PUSHJ PDP,NUMOUT
00210 PUSHJ PDP,TERPRI
00220 MOVEI U1,[ASCIZ /BLACK = /]
00230 PUSHJ PDP,PRINT
00240 MOVE U1,BTERMS
00250 PUSHJ PDP,OCTOUT
00260 PUSHJ PDP,TERPRI
00270 MOVEI U1,[ASCIZ /WHITE = /]
00280 PUSHJ PDP,PRINT
00290 MOVE U1,WTERMS
00300 PUSHJ PDP,OCTOUT
00310 PUSHJ PDP,TERPRI
00312 MOVEI U1,[ASCIZ /REPLY = /]
00313 PUSHJ PDP,PRINT
00314 MOVE U1,REPLYD
00315 PUSHJ PDP,NUMOUT
00316 PUSHJ PDP,TERPRI
00320 MOVEI U1,[ASCIZ /FLIT = /]
00330 PUSHJ PDP,PRINT
00340 MOVE U1,PLAUSD
00360 PUSHJ PDP,NUMOUT
00370 PUSHJ PDP,TERPRI
00380 MOVEI U1,[ASCIZ /STEM = /]
00390 PUSHJ PDP,PRINT
00400 MOVE U1,STEMD
00420 PUSHJ PDP,NUMOUT
00430 PUSHJ PDP,TERPRI
00440 MOVEI U1,[ASCIZ /PLAY = /]
00450 PUSHJ PDP,PRINT
00460 MOVE U1,PLAYD
00480 PUSHJ PDP,NUMOUT
00490 PUSHJ PDP,TERPRI
00500 POPJ PDP,
00510
00511 REPLYD: 5
00520 PLAUSD: 2
00530 STEMD: 1
00540 PLAYD: 1
00550 PLDPT: 0
00560
00570
00580 PAGE
00590
00600 CSFLAG: SOS HEADFL
00610 SETCMM SFLAG ;SFLAG IS THE SCORE PRINT OUT FLIP-FLOP
00620 POPJ PDP,
00630
00640 TELLDW: MOVEI U1,[ASCIZ / DEPTH=/]
00650 PUSHJ PDP,PRINT
00660 MOVE U1,DEPTH
00670 PUSHJ PDP,NUMOUT
00680 MOVEI U1,[ASCIZ /, WIDTH=/]
00690 PUSHJ PDP,PRINT
00700 MOVE U1,WIDTH
00710 PUSHJ PDP,NUMOUT
00720 SETZM DWFLAG
00730 POPJ PDP,
00740 TIME: Z
00750 RUNT: -1
00760 MOVE U1,TIME
00770 JRST RJOUT
00780
00790 CRUNT: SOS HEADFL
00800 SETCMM RUNT
00810 POPJ PDP,
00820
00830 CDIFF: SETCMM DIFF
00840 POPJ PDP,
00850 DIFFT: Z
00860 DIFF: Z
00870 TOTAL: Z
00880
00890 CTOTAL: SETCMM TOTAL
00900 POPJ PDP,
00910
00920
00930 TELLS: MOVEI U1,[ASCIZ / BKMOVE /]
00940 SKIPN COUNT
00950 JRST .+10
00960 MOVE U1,SCORE
00970 MOVEI X1," "
00980 CAMLE U1,LOSE
00990 PUSHJ PDP,TYO
01000 CAMLE U1,LOSE
01010 JRST TELLS2
01020 MOVEI U1,[ASCIZ / FORCED /]
01030 PUSHJ PDP,PRINT
01040 POPJ PDP,
01050 TELLS2: MOVE U1,SCORE
01060 CAMGE U1,GOOD
01070 JRST .+10
01080 MOVNS U1
01090 ADD U1,WIN
01100 ADDI U1,1
01110 PUSHJ PDP,SOUT2
01120 MOVEI U1,[ASCIZ / MOVE WIN./]
01130 PUSHJ PDP,PRINT
01140 POPJ PDP,
01150 ASH U1,-5
01160 ADDI U1,200 ;CONTERACT NEG. EVA
01170 MOVEM U1,U1S#
01180 ASH U1,-10
01190 PUSHJ PDP,RJOUT ;PIECE COUNT
01200 MOVE U1,U1S
01210 ANDI U1,377
01220 SUBI U1,200
01230 PUSHJ PDP,RJOUT ;EVA PORTION
01240 POPJ PDP,
01250
01260 NUMIN: PUSHJ PDP,SCAN ;SCAN NEXT SYMBOL
01270 JUMPGE U1,NUMIN ;JUMP IF NOT A NUMBER.
01280 HRRZ U2,U1 ;GET VALUE.
01290 PUSHJ PDP,OUTIN ;FIX THE NUMBER
01300 POPJ PDP, ;TRA 1,4
01310
00010
00020 FSTCR: 0
00030 CRFST: SKIPE FSTCR
00040 POPJ PDP,
00050 SETZM SIDE
00060 MOVE A,OA
00070 MOVE P,OP
00080 MOVE K,OK
00090 PUSHJ PDP,TERPRI
00100 PUSHJ PDP,TERPRI
00110 PUSHJ PDP,PDP16
00120 MOVEI U1,[ASCIZ / WILL PLAY BLACK./]
00130 MOVE X1,SI
00140 TRNN X1,1
00150 AOS SIDE
00160 TRNN X1,1
00170 MOVEI U1,[ASCIZ / WILL PLAY WHITE./]
00180 PUSHJ PDP,PRINT
00190 PUSHJ PDP,SAVBD
00200 PUSHJ PDP,TERPRI
00210 PUSHJ PDP,TERPRI
00220 PUSHJ PDP,TERPRI
00230 AOS FSTCR
00240 JRST MKPLAY
00250
00010 MUP: MOVE A,MA-10(X1)
00020 SKIPN A
00030 POPJ PDP,
00040 MOVE P,MP-10(X1)
00050 MOVE K,MK-10(X1)
00060 MOVEM A,MOVAA ;TREE DATA
00070 MOVE U1,[POINT 4,MJ]
00080 MOVEM U1,MJBP ;INIT BYTE POINTER
00090 MOVE U1,[POINT 6,MJBP,5]
00100 MOVEM U1,BPBP ;INIT BYTE POINTER'S BYTE POINTER
00110 SKIPE U1,MRF-10(X1)
00120 JRST RF
00130 SKIPE U1,MLF-10(X1)
00140 JRST LF
00150 SKIPE U1,MLB-10(X1)
00160 JRST LB
00170 SKIPN U1,MRB-10(X1)
00180 POPJ PDP, ;NO MOVE RETURN
00190 MOVEM U1,SAVE
00200 HRLI I,MRB-10(X1)
00210 HRRI I,4300 ;RB FLAG BIT IN I
00220 SUBI U1,1
00230 ANDM U1,MRB-10(X1) ;CORRECTED RB WORD WITH MOVE BIT GONE
00240 ADDI U1,1
00250 XOR U1,MRB-10(X1) ;MOVE BIT ONLY IN U1
00260 MOVEI U2,5 ;MAGIC NUMBER IN U2
00270 JRST UPDATE
00280 RF: MOVEM U1,SAVE
00290 HRLI I,MRF-10(X1)
00300 HRRI I,700 ;RF FLAG BIT IN I
00310 SUBI U1,1
00320 ANDM U1,MRF-10(X1) ;CORRECTED RF WORD WITH MOVE BIT GONE
00330 ADDI U1,1
00340 XOR U1,MRF-10(X1) ;MOVE BIT ONLY IN U1
00350 MOVEI U2,-4 ;MAGIC NUMBER IN U2
00360 JRST UPDATE
00370 LF: MOVEM U1,SAVE
00380 HRLI I,MLF-10(X1)
00390 HRRI I,1300 ;LF FLAG BIT IN I
00400 SUBI U1,1
00410 ANDM U1,MLF-10(X1) ;CORRECTED LF WORD WITH MOVE BIT GONE
00420 ADDI U1,1
00430 XOR U1,MLF-10(X1) ;MOVE BIT ONLY IN U1
00440 MOVEI U2,-5 ;MAGIC NUMBER IN U2
00450 JRST UPDATE
00460 LB: MOVEM U1,SAVE
00470 HRLI I,MLB-10(X1)
00480 HRRI I,2300 ;LB FLAG BIT IN I
00490 SUBI U1,1
00500 ANDM U1,MLB-10(X1) ;CORRECTED LB WORD WITH MOVE BIT GONE
00510 ADDI U1,1
00520 XOR U1,MLB-10(X1) ;MOVE BIT ONLY IN U1
00530 MOVEI U2,4 ;MAGIC NUMBER IN U2
00540 JRST UPDATE
00010 OVUP: MOVE A,OVA(X1)
00020 SKIPN A
00030 POPJ PDP,
00040 MOVE P,OVP(X1)
00050 MOVE K,OVK(X1)
00060 MOVEM A,MOVAA ;TREE DATA
00070 MOVE U1,[POINT 4,MJ]
00080 MOVEM U1,MJBP ;INIT BYTE POINTER
00090 MOVE U1,[POINT 6,MJBP,5]
00100 MOVEM U1,BPBP ;INIT BYTE POINTER'S BYTE POINTER
00110 SKIPE U1,OVRF(X1)
00120 JRST OVUPRF
00130 SKIPE U1,OVLF(X1)
00140 JRST OVUPLF
00150 SKIPE U1,OVLB(X1)
00160 JRST OVUPLB
00170 SKIPN U1,OVRB(X1)
00180 POPJ PDP, ;NO MOVE RETURN
00190 MOVEM U1,SAVE
00200 HRLI I,OVRB(X1)
00210 HRRI I,4300 ;RB FLAG BIT IN I
00220 SUBI U1,1
00230 ANDM U1,OVRB(X1) ;CORRECTED RB WORD WITH MOVE BIT GONE
00240 ADDI U1,1
00250 XOR U1,OVRB(X1) ;MOVE BIT ONLY IN U1
00260 MOVEI U2,5 ;MAGIC NUMBER IN U2
00270 JRST UPDATE
00280 OVUPRF: MOVEM U1,SAVE
00290 HRLI I,OVRF(X1)
00300 HRRI I,700 ;RF FLAG BIT IN I
00310 SUBI U1,1
00320 ANDM U1,OVRF(X1) ;CORRECTED RF WORD WITH MOVE BIT GONE
00330 ADDI U1,1
00340 XOR U1,OVRF(X1) ;MOVE BIT ONLY IN U1
00350 MOVEI U2,-4 ;MAGIC NUMBER IN U2
00360 JRST UPDATE
00370 OVUPLF: MOVEM U1,SAVE
00380 HRLI I,OVLF(X1)
00390 HRRI I,1300 ;LF FLAG BIT IN I
00400 SUBI U1,1
00410 ANDM U1,OVLF(X1) ;CORRECTED LF WORD WITH MOVE BIT GONE
00420 ADDI U1,1
00430 XOR U1,OVLF(X1) ;MOVE BIT ONLY IN U1
00440 MOVEI U2,-5 ;MAGIC NUMBER IN U2
00450 JRST UPDATE
00460 OVUPLB: MOVEM U1,SAVE
00470 HRLI I,OVLB(X1)
00480 HRRI I,2300 ;LB FLAG BIT IN I
00490 SUBI U1,1
00500 ANDM U1,OVLB(X1) ;CORRECTED LB WORD WITH MOVE BIT GONE
00510 ADDI U1,1
00520 XOR U1,OVLB(X1) ;MOVE BIT ONLY IN U1
00530 MOVEI U2,4 ;MAGIC NUMBER IN U2
00540 JRST UPDATE
00010 SUBTTL MACROS FOR SIGNATURE TABLES
00020
00030 DEFINE MAC1 (S) <;OUTER MACRO
00040 SETZ U1,
00070 MAC2 \<2*S-1>
00074 ASH U2,11 ;USE 9 BITS FOR EACH TABLE
00078 ADDM U2,U2SAV
00080 IMULI U1,13
00090 MAC2 \<2*S>
00094 ADDM U2,U2SAV
00100 ADD U5,SIGT2'S(U1)>
00110
00120 DEFINE MAC2 (SC) <;CENTRAL MACRO
00130 MAC3 1
00140 MOVE U2,Q
00150 IMULI U2,3
00152 MAC3 1
00154 ADD U2,Q
00156 IMULI U2,3
00160 MAC3 1
00170 ADD U2,Q
00180 IMULI U2,5
00190 MAC3 2
00200 ADD U2,Q
00210 ADD U1,SIGT1'SC(U2)>
00220
00230 DEFINE MAC3 (C) <;INNER MACRO
00240 SETZB Q,P
00250 LSHC Q,4
00260 LSHC P,4
00270 SUB Q,P
00280 CAILE Q,C
00290 MOVEI Q,C
00300 CAMGE Q,NEG+C
00310 MOVNI Q,C>
00320
00330 NEG: 0 ;NEGATION TABLE
00340 -1
00350 -2
00360 -3
00370 -4
00380 -5
00390 -6
00400 -7
00410 -10
00500
00510 INTERN DATA
00520 EXTERN NUM2,NUM3
00530
00540 DATA: MOVE X4,PHASE
00550 IMULI X4,↑D16
00554 MOVEI U1,[ASCIZ / TERM DATA FOR PHASE /]
00558 PUSHJ PDP,PRINT
00562 MOVE U1,PHASE
00566 PUSHJ PDP,NUMOUT
00568 PUSHJ PDP,TERPRI
00570 REPEAT 4,< MOVEI U1,[ASCIZ / /]
00580 PUSHJ PDP,PRINT
00590 REPEAT 4,< XCT TLIST(X4)
00600 ADDI X4,4
00604 PUSHJ PDP,PRINT
00608 MOVEI U1,[ASCIZ / /]
00610 PUSHJ PDP,PRINT>
00620 SUBI X4,↑D15
00630 PUSHJ PDP,TERPRI>
00640 SETZ X4,
00650 MOVEI U1,[ASCIZ /TRUNK PIECE EVAL/]
00660 PUSHJ PDP,PRINT
00690 PUSHJ PDP,TERPRI
00700 DATA2: SKIPN U2,MOVES(X4)
00710 JRST TERPRI
00720 HLRZ U1,U2
00730 PUSHJ PDP,NUMOUT
00740 MOVEI U1,[ASCIZ /-/]
00750 PUSHJ PDP,PRINT
00760 HRRZ U1,U2
00770 PUSHJ PDP,NUMOUT
00780 MOVEI U1,[ASCIZ / /]
00790 PUSHJ PDP,PRINT
00800 MOVE U1,FLZZ(X4)
00810 PUSHJ PDP,TELLS2+1
00820 MOVEI U1,[ASCIZ / /]
00830 PUSHJ PDP,PRINT
00840 MOVEI U3,4
00850 DATA3: SETZ U1,
00860 MOVE X2,FLZZZ(X4)
00870 LSHC U1,11
00880 MOVEM X2,FLZZZ(X4)
00890 IDIVI U1,5
00892 MOVEM X2,X2SSS#
00894 IDIVI U1,3
00900 MOVEM X2,X2SS
00910 IDIVI U1,3
00920 MOVEM X2,X2S
00930 SUBI U1,1
00940 PUSHJ PDP,NUM1
00950 MOVE U1,X2S
00960 SUBI U1,1
00970 PUSHJ PDP,NUM1
00980 MOVE U1,X2SS
00982 SUBI U1,1
00984 PUSHJ PDP,NUM1
00986 MOVE U1,X2SSS
00990 SUBI U1,2
01000 PUSHJ PDP,NUM1
01010 SOJLE U3,.+4
01020 MOVEI U1,[ASCIZ / /]
01030 PUSHJ PDP,PRINT
01040 JRST DATA3
01050 PUSHJ PDP,TERPRI
01060 AOJA X4,DATA2
01070
01080 U2SAV: Z ;TEMP SAVE OF U2
01090 ZZZ: BLOCK 20 ;TERM SCORE IN PL
01100 BZZ: BLOCK 20
01110 FLZZZ: BLOCK 20
01120
01130 NUM1: JUMPL U1,NUM2
01140 MOVEI X1," "
01150 PUSHJ PDP,TYO
01160 JRST NUM3
01170
00010 EVA: MOVEM X1,CFZ1 ;SAVE X1
00020 PUSHJ PDP,PCCNT ;COUNT PIECES
00030 MOVE U4,CFLAG ;SEE WHAT KIND OF EVALUATION TO DO
00040 JUMPE U4,CFA1
00050 LEV1: MOVE A,EEB(X3)
00060 MOVE K,EEB-1(X3)
00070 SETZB U5,U2SAV
00080 MAC1 1
00090 IMULI U5,17
00095 HRLZS U2SAV
00100 MOVE A,EEB2(X3)
00110 MOVE K,EEB2-1(X3)
00120 MAC1 2
00130 MOVE Z,SIGTF(U5) ;GET FINAL SCORE
00140 CFC: ADD Z,U3 ;ADD IN PIECE-COUNT TO SCORE
00150 MOVE X1,PLY(X2) ;PLY AT WHICH TIP WAS ENTERED
00160 ADD X1,X3 ;PLUS PLY IN TIP GIVES TRUE PLY
00170 SUBI X1,40
00180 ASH Z,5
00190 SKIPL Z
00200 MOVNS X1
00210 ADD Z,X1 ;ADD PLY TO SCORE
00220 MOVE X1,CFZ1 ;RESTORE X1 FOR RETURN
00230 POPJ PDP, ;RETURN--SCORE IS LEFT IN Z
00240 CFA1: MOVE Z,U3 ;THIS IS ONLY EXECUTED IF CFLAG=0
00250 MOVE X1,PLY(X2)
00260 ADD X1,X3
00270 SUBI X1,77
00280 SKIPL Z
00290 MOVNS X1
00300 ADD Z,X1
00310 CFA3: MOVE X1,CFZ1 ;RESTORE X1 FOR RETURN
00320 POPJ PDP, ;RETURN--SCORE IS LEFT IN Z
00330
00340 PHASFI: MOVE U1,SIG0(U5)
00350 CAMN U1,SIGN0
00360 POPJ PDP, ;CORRECT SIG VALUES ALREADY IN
00370 MOVEM U1,SIGN0
00380 INIT 7,17
00390 SIXBIT /DSK/
00400 Z
00410 JRST DSKERR
00411 MOVE U1,[SIXBIT /DAT/]
00412 MOVEM U1,SIGN0+1
00413 MOVE U1,[055000000000]
00414 MOVEM U1,SIGN0+2
00415 MOVE U1,[SIXBIT / 2ALS/]
00416 MOVEM U1,SIGN0+3
00420 LOOKUP 7,SIGN0
00430 JRST DSKERR
00440 INPUT 7,SIGT0
00450 RELEAS 7,
00460 POPJ PDP,
00470
00480
00490 DSKERR: MOVEI U1,[ASCIZ /TRY AGAIN/]
00500 PUSHJ PDP,PRINT
00510 PUSHJ PDP,TERPRI
00520 POPJ PDP,
00530
00540 SIGSIZ=1764 ;MUST AGREE WITH CKL
00550
00560 SIGT0: IOWD SIGSIZ,LABEL
00570 Z
00580
00590 SIGN0: SIXBIT /Z/ ;Z TO INSURE FILLING FIRST TIME
00600 SIXBIT /DAT/
00610 055000000000
00620 SIXBIT / 2ALS/
00630
00640 SIG0: SIXBIT /SIGT0/
00650 SIXBIT /SIGT1/
00660 SIXBIT /SIGT2/
00670 SIXBIT /SIGT3/
00680
00690 SUBTTL DATA FOR EVALUATION -- C. FARRELL
00700 PAGE
00710
00720 CFZ1: Z ;TEMPORARY STORAGE
00730 CFZ2: Z
00740 CFZ3: Z
00750 CFZ4: Z
00760 CFZ5: Z
00770 CFZ10: Z ;BACKUP LOCATION FOR PASK
00780 CFZ11: Z ;BACKUP LOCATION FOR ACTK
00790 CEMPTY: Z ;TEMPORARY LOCATION FOR EMPTY, ET.AL.
00800
00810 LABEL: BLOCK 5
00820 EVAL11: BLOCK 103 ;SIGNATURE TABLES
00830 SIGT11: BLOCK 104 ;LABEL IS CENTERED IN TABLE TO ALLOW NEGATIVE SUBSCRIPTS
00840 EVAL12: BLOCK 103
00850 SIGT12: BLOCK 104
00860 EVAL13: BLOCK 103
00870 SIGT13: BLOCK 104
00880 EVAL14: BLOCK 103
00890 SIGT14: BLOCK 104
00940 EVAL21: BLOCK 74
00950 SIGT21: BLOCK 75
00960 EVAL22: BLOCK 74
00970 SIGT22: BLOCK 75
00980 EVALF: BLOCK 160
00990 SIGTF: BLOCK 161
01000 TTABLE: BLOCK 22 ;SPACE FOR T VALUES
01010
01020
01030
01040
01050 BLOWUP=10 ;MUST CORRESPOND WITH VALUE IN CKL
01060 INPSIZ=↑D1020 ;DIVISABLE BY 6 AND <1024
01070
01080 FINMOV: PUSHJ PDP,FINDFI ;GET FILE NAME
01090 PUSHJ PDP,GETFIL ;AND GET NEW FILE
01100 FINMO2: PUSHJ PDP,FINDX1 ;GET LINE ENTRY
01110 JRST FINMO3 ;NOT FOUND BUT WHY
01120 FOUNDM: MOVE X5,INPA(X1)
01130 PUSHJ PDP,EXBITS
01134 SKIPN X5
01138 POPJ PDP, ;IGNORE 0-0 BOARDS
01140 MOVEM X5,X4
01150 JUMPE U4,FOUNDN ;NO KING CASE
01160 MOVE X5,INPP(X1)
01170 PUSHJ PDP,EXBITS
01180 MOVE Z,X5
01190 MOVE X5,INPK(X1)
01200 PUSHJ PDP,EXBITS
01210 LSH Z,4
01220 IORB X5,Z
01230 JUMPE X5,CHOICE ;DRAW MOVE
01234 SKIPE WONFLG ;HAVE WE PRINTED MESSAGE
01238 JRST CHOICE ;YES
01239 SETOM WONFLG
01240 TRNE Z,1
01250 JRST BWINMV
01260 MOVEI U1,[ASCIZ /YOU HAVE A POSSIBLE WIN IN /]
01270 PUSHJ PDP,PRINT
01280 MOVE U1,Z
01290 PUSHJ PDP,NUMOUT
01300 MOVEI U1,[ASCIZ / MOVES! GOOD LUCK./]
01310 PUSHJ PDP,PRINT
01320 PUSHJ PDP,TERPRI
01330 JRST CHOICE
01340 BWINMV: MOVEI U1,[ASCIZ /THE PDP-10 MAY WIN IN /]
01350 PUSHJ PDP,PRINT
01360 MOVE U1,Z
01370 PUSHJ PDP,NUMOUT
01380 MOVEI U1,[ASCIZ / MOVES./]
01390 PUSHJ PDP,TERPRI
01400 JRST CHOICE
01410
01420 FOUNDN: MOVE X5,INPP(X1)
01430 PUSHJ PDP,EXBITS
01440 JUMPE X5,CHOICE
01450 CALL U1,[SIXBIT /MSTIME/] ;FLIT A COIN
01460 TRNN U1,1
01470 MOVEM X5,X4
01480 CHOICE: SKIPN COLOR
01485 JRST .+10
01490 MOVEI U1,1
01495 CAMN X4,X4TAB(U1)
01500 JRST .+4
01505 CAIGE U1,17
01510 AOJA U1,.-3
01515 POPJ PDP, ;ERROR EXIT
01520 MOVE X4,U1
01530 SUBI X4,1 ;COUNT FROM ZERO
01540 MOVEM X4,MOVX ;REPORT MOVE
01550 POP PDP,(PDP) ;BYPASS FIRST RETURN
01560 SETZM COUNT ;BOOK MOVE SIGNAL
01570 JRST EXIT1
01580
01590 FINMO3: CAIGE X1,INPSIZ ;IS THIS THE RIGHT FILE
01600 POPJ PDP, ;YES BUT NOT THERE
01610 MOVE U1,DSKBKM ;NO SO TRY NEXT FILE
01620 SUB U1,[000100000000]
01630 PUSHJ PDP,GETFIA
01640 JRST FINMO2 ;THIS MAX BE IT
01650
01660 EXBITS: LSHC X5,-11 ;EXTRACT GUARD BITS
01670 LSH X5,-10
01680 LSHC X5,-1
01690 LSH X5,-10
01700 LSHC X5,-1
01710 LSH X5,-10
01720 LSHC X5,3
01730 POPJ PDP,
01740
01750 DSKBKM: Z
01760 SIXBIT /CHK/
01770 055000000000
01780 SIXBIT / 3ALS/
01790
01800 BKMIN: IOWD INPSIZ,INPA
01810 Z
01820
01830 INPA: BLOCK INPSIZ
01840 INPP=INPA+1
01850 INPK=INPA+2
01860 Z
01870 BKMOVE: Z
01880 BOOKA:
01890 BOOKP:
01900 BOOKK:
01910 BOOKM:
01920 BOOKI:
01930 FILEIN: Z
01940
01950 GETFIL: LDB U1,[POINT 5,U2,29]
01960 LDB U3,[POINT 5,U2,35]
01970 MOVE U1,CRIP(U1)
01980 LSH U1,14
01990 IOR U1,CRIP(U3)
02000 TRNN U2,10000 ;TEST K BIT
02010 IOR U1,[SIXBIT /MA/]
02020 TRNE U2,10000 ;TEST AGAIN
02030 IOR U1,[SIXBIT /KA/] ;KING BOARDS
02040 SETZ X5,
02050 SKIPE U5,WHERE(X5)
02060 JRST .+3
02070 POP PDP,(PDP)
02080 POPJ PDP,
02090 CAMN U2,U5 ;CHECK MAJOR NAME
02100 JRST .+3
02110 ADDI X5,BLOWUP+1
02120 JRST .-7
02130 SKIPN COLOR
02140 JRST SAV0
02150 MOVEM U1,U1S#
02160 PUSHJ PDP,REVERA
02170 MOVEM Z,U2
02180 PUSHJ PDP,REVERP
02190 MOVEM Z,U3
02200 PUSHJ PDP,REVERK
02210 MOVEM Z,U4
02220 MOVE U1,U1S
02230 JRST .+4
02240 SAV0: MOVEM A,U2
02250 MOVEM P,U3
02260 MOVEM K,U4
02270 MOVEI U5,10 ;TO COUNT MINORS
02280 CAML U2,WHERE+1(X5)
02290 JRST GETFIA
02300 ADDI X5,1
02310 ADD U1,[000100000000]
02320 SOJG U5,.-4
02330 POP PDP,(PDP) ;NOT FOUND
02340 POPJ PDP,
02350
02360 GETFIA: CAMN U1,DSKBKM ;COMPARE WITH OLD VALUE
02370 POPJ PDP, ;FILE ALREADY IN
02380 MOVE U5,DSKBKM
02390 MOVEM U5,DSKBK2# ;SAVE TEMPORARILY
02400 MOVEM U1,DSKBKM
02410 MOVE U1,[SIXBIT /CHK/]
02420 MOVEM U1,DSKBKM+1
02430 MOVE U1,[055000000000]
02440 MOVEM U1,DSKBKM+2
02450 MOVE U1,[SIXBIT / 3ALS/]
02460 MOVEM U1,DSKBKM+3
02470 INIT 12,17
02480 SIXBIT /DSK/
02490 Z
02500 HALT
02510 LOOKUP 12,DSKBKM
02520 JRST .+4 ;ERROR
02530 INPUT 12,BKMIN
02540 RELEAS 12,
02550 POPJ PDP,
02560
02570 MOVE U1,DSKBK2
02580 MOVEM U1,DSKBKM ;RESTORE FORMER VALUE
02590 POP PDP,(PDP)
02600 POPJ PDP, ;NOT FOUND
02610
02620 MESS: ASCIZ /
02630 CHECKERS. BLACK PIECES GO ON LOW NUMBERS AND BLACK PLAYS FIRST. ENTER
02640 MOVE (EXAMPLE 11-15) GIVE CR AND WAIT FOR REPLY. CR ONLY CAUSES PDP
02650 TO PLAY BLACK. JUMPS MUST BE TAKEN. TYPE I FOR MORE INFORMATION.
02660 /
02670 END